User:1VeertjeBot/script
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();
?>