User:1VeertjeBot/script

From Wikimedia Commons, the free media repository
Jump to navigation Jump to search
<?php
include_once('variables.php');
require_once( __DIR__ . '/vendor/autoload.php' );
use Mediawiki\Api\SimpleRequest;
// Log in to a wiki
$api = new \Mediawiki\Api\MediawikiApi( 'https://commons.wikimedia.org/w/api.php' );
$api->login( new \Mediawiki\Api\ApiUser( $wpusername, $wppassword ) );
$services = new \Mediawiki\Api\MediawikiFactory( $api );
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
mysqli_set_charset($conn, 'utf8');
// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
} 
function getCommonName($conn, $label, $name){
	if ($label == 'channel'){
		$label = 'channel_id';
	}
	else{
		$label = 'youtube_username';
	}
	$sql = 'SELECT common_name from youtube_channels WHERE '.$label.' = "'.mysqli_real_escape_string($conn, $name).'"';
	$result = $conn->query($sql);
	if ($result ) {
		$row = $result->fetch_assoc();
		return $row['common_name'];
	}
	else{
		return false;
	}

}
$sql = "SELECT id, title FROM ttrss_entries where entry_read = 0 ";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
    // output data of each row
    while($row = $result->fetch_assoc()) {
    	$common_name = false;
    	$mark_read = false;
	    $content = json_decode(file_get_contents("https://commons.wikimedia.org/w/api.php?action=parse&page=File:".urlencode(str_replace(" ", "_", $row['title']))."&contentmodel=wikitext&format=json"), true);
	    $categories = $content["parse"]["categories"];
	 	$pageid 	= $content['parse']['pageid'];
	 	
	 	//find YouTube channel_id/username
	 	foreach ($content["parse"]["externallinks"] as $key => $value) {
	 		if (preg_match('/(https?:\/\/|)(www\.|)?youtube\.com\/(channel|user)\/([a-zA-Z0-9\-]+)/', $value, $matches)){
	 			$common_name = getCommonName($conn, $matches[3], $matches[4]);
	 			break;
	 		}	
	 	}
	 	//get pubdate
        $content = json_decode(file_get_contents("https://commons.wikimedia.org/w/api.php?action=query&prop=imageinfo&iiprop=extmetadata&pageids=".$pageid."&format=json"), true);
    	$pubdate = strtotime($content['query']['pages'][$pageid]['imageinfo'][0]['extmetadata']['DateTimeOriginal']['value']);

    	if ($common_name == 'RN7' && $pubdate < date(strtotime('2017-11-01'))){
			$common_name = 'N1';
		}
        //is it needed to add category?
        foreach ($categories as $key => $category) {
        	$category = $category['*'];

        	if (preg_match('/^Videos_.+'.date('Y',$pubdate).'/',$category)){
        		$mark_read = true;
        		break;
        	}
        	elseif ($common_name && preg_match('/^'.$common_name.'_videos_in_'.date('Y',$pubdate).'/',$category)){
    			$mark_read = true;
    			break;
        	}
        }
        if (!$mark_read){
        	
        	$category = "\n[[Category:Videos of ".date('Y',$pubdate)."|".date('md',$pubdate)."]]";
        	if ($common_name){
        		$category = "\n[[Category:".$common_name." videos in ".date('Y',$pubdate)."|".date('md',$pubdate)."]]";
        	}
        	$category2 = substr($category,0,-7)."]]"; 
        	
        	try{
			  $response = $api->postRequest( new SimpleRequest( 'edit',  array( 'pageid' => $pageid, 'appendtext' => $category, 'bot' => true, 'token' => $api->getToken(), 'summary' => "Added ".$category2, 'nocreate' => true, 'redirect' => true ) ) );
			  if ($response['edit']['result'] == 'Success'){
			  	$mark_read = true;
			  }

			}
			catch ( UsageException $e ) {
			    echo "The api returned an error!";
			}
        }

        if ($mark_read == true){
        	$conn->query("UPDATE ttrss_entries set entry_read = 1 where id =".$row['id']);
        }
        else{
        	//a
        }

    }
} else {
    echo "0 results";
}

$conn->close();
?>