Page MenuHomeGitPull.it

D25.1782096300.diff
No OneTemporary

Authored By
Unknown
Size
3 KB
Referenced Files
None
Subscribers
None

D25.1782096300.diff

diff --git a/tools/wikidata-blame.php b/tools/wikidata-blame.php
new file mode 100755
--- /dev/null
+++ b/tools/wikidata-blame.php
@@ -0,0 +1,138 @@
+#!/usr/bin/php
+<?php
+# Copyright (C) 2020 Valerio Bozzolan
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+// exit if not CLI
+$argv or exit( 1 );
+
+// load the framework
+require __DIR__ . '/../autoload.php';
+
+// load configuration or create it
+ConfigWizard::requireOrCreate( __DIR__ . '/config.php' );
+
+use \cli\Log;
+use \cli\Input;
+use \cli\Opts;
+use \mw\API\PageMatcher;
+
+// register all CLI parameters
+$opts = new Opts( [
+ new ParamFlag( 'help', 'h', "Show this help and quit" ),
+] );
+
+// error messages to be displayed
+$messages = [];
+
+// command line arguments
+$arguments = Opts::unnamedArguments();
+if( count( $arguments ) < 2 ) {
+ $messages[] = "Please specify both the SPARQL file and the user name to blame";
+}
+
+// take the SPARQL file pathname
+$sparql_file = array_shift( $arguments );
+if( !file_exists( $sparql_file ) ) {
+ $messages[] = sprintf(
+ "The file %s does not exist",
+ $sparql_file
+ );
+}
+
+// read the SPARQL query
+$sparql_query = file_get_contents( $sparql_file );
+if( !$sparql_query ) {
+ $messages[] = sprintf(
+ "Cannot read a non-empty SPARQL query from the file %s",
+ $sparql_file
+ );
+}
+
+// user names to blame
+$user_names = $arguments;
+
+// show the help
+$show_help = $opts->getArg( 'help' );
+if( $show_help ) {
+ $messages = [];
+} else {
+ $show_help = $messages;
+}
+
+// eventually show the help message
+if( $show_help ) {
+ echo "Usage:\n {$argv[ 0 ]} FILE.sparql USER_NAME\n";
+ echo "Allowed OPTIONS:\n";
+ foreach( $opts->getParams() as $param ) {
+ $commands = [];
+ if( $param->hasLongName() ) {
+ $commands[] = '--' . $param->getLongName();
+ }
+ if( $param->hasShortName() ) {
+ $commands[] = '-' . $param->getShortName();
+ }
+ $command = implode( '|', $commands );
+ if( $command && ! $param->isFlag() ) {
+ $command .= $param->isValueOptional()
+ ? '=[VALUE]'
+ : '=VALUE';
+ }
+ printf( ' % -20s ', $command );
+ if( $param->hasDescription() ) {
+ echo ' ' . $param->getDescription();
+ }
+ echo "\n";
+ }
+ foreach( $messages as $msg ) {
+ echo "\nError: $msg";
+ }
+ echo "\n";
+ exit( $opts->getArg( 'help' ) ? 0 : 1 );
+}
+
+// try to open the file
+$file = fopen( $filename, 'w' );
+if( !$file ) {
+ Log::error( "Can't open file '$filename'" );
+ exit( 1 );
+}
+
+$wikidata = \wm\Wikidata::instance();
+$wikidata->login();
+
+https://www.wikidata.org/w/api.php?action=help&modules=query%2Busercontribs
+
+$requests = $wikidata->createQuery( [
+ 'action' => 'query',
+ 'titles' => $page_titles,
+ 'prop' => 'revisions',
+ 'rvprop' => [
+ 'ids',
+ 'flags',
+ 'timestamp',
+ 'user',
+ 'userid',
+ 'size',
+ 'slotsize',
+ 'sha1',
+ 'comment',
+ 'content',
+ ],
+ 'rvslots' => 'main',
+ 'rvlimit' => $limit,
+] );
+
+

File Metadata

Mime Type
text/plain
Expires
Mon, Jun 22, 04:45 (21 h, 10 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
1972882
Default Alt Text
D25.1782096300.diff (3 KB)

Event Timeline