<?php

require_once realpath(dirname(dirname(dirname(__DIR__))) . DIRECTORY_SEPARATOR . 'indexer.php');
use nzedb\ColorCLI;
use nzedb\RottenTomato;
use nzedb\db\Settings;
$cli = new ColorCLI();
$rtkey = (new Settings())->getSetting('rottentomatokey');
if (isset($rtkey)) {
    $rt = new RottenTomato($rtkey);
    print_r(json_decode($rt->searchMovie("inception")));
    $url = RottenTomato::API_URL . "movies.json?apikey=" . $rt->getApiKey() . "&q=inception&page_limit=50";
    exit($cli->header("\nIf nothing was displayed above then there might be an error. If so, go to the following url: {$url}\n"));
} else {
    exit($cli->error("\nNo rotten tomato key.\n"));
}
Exemple #2
0
    /**
     * Download new headers for a single group.
     *
     * @param array $groupMySQL Array of MySQL results for a single group.
     * @param int   $maxHeaders (Optional) How many headers to download max.
     *
     * @return void
     */
    public function updateGroup($groupMySQL, $maxHeaders = 0)
    {
        $startGroup = microtime(true);
        $this->logIndexerStart();
        // Select the group on the NNTP server, gets the latest info on it.
        $groupNNTP = $this->_nntp->selectGroup($groupMySQL['name']);
        if ($this->_nntp->isError($groupNNTP)) {
            $groupNNTP = $this->_nntp->dataError($this->_nntp, $groupMySQL['name']);
            if ($groupNNTP->code == 411) {
                $this->_groups->disableIfNotExist($groupMySQL['id']);
            }
            if ($this->_nntp->isError($groupNNTP)) {
                return;
            }
        }
        if ($this->_echoCLI) {
            $this->_colorCLI->doEcho($this->_colorCLI->primary('Processing ' . $groupMySQL['name']), true);
        }
        // Attempt to repair any missing parts before grabbing new ones.
        if ($groupMySQL['last_record'] != 0) {
            if ($this->_partRepair) {
                if ($this->_echoCLI) {
                    $this->_colorCLI->doEcho($this->_colorCLI->primary('Part repair enabled. Checking for missing parts.'), true);
                }
                $this->partRepair($groupMySQL);
            } else {
                if ($this->_echoCLI) {
                    $this->_colorCLI->doEcho($this->_colorCLI->primary('Part repair disabled by user.'), true);
                }
            }
        }
        // Generate postdate for first record, for those that upgraded.
        if (is_null($groupMySQL['first_record_postdate']) && $groupMySQL['first_record'] != 0) {
            $groupMySQL['first_record_postdate'] = $this->postdate($groupMySQL['first_record'], $groupNNTP);
            $this->_pdo->queryExec(sprintf('
					UPDATE groups
					SET first_record_postdate = %s
					WHERE id = %d', $this->_pdo->from_unixtime($groupMySQL['first_record_postdate']), $groupMySQL['id']));
        }
        // Get first article we want aka the oldest.
        if ($groupMySQL['last_record'] == 0) {
            if ($this->_newGroupScanByDays) {
                // For new newsgroups - determine here how far we want to go back using date.
                $first = $this->daytopost($this->_newGroupDaysToScan, $groupNNTP);
            } else {
                if ($groupNNTP['first'] >= $groupNNTP['last'] - ($this->_newGroupMessagesToScan + $this->messageBuffer)) {
                    // If what we want is lower than the groups first article, set the wanted first to the first.
                    $first = $groupNNTP['first'];
                } else {
                    // Or else, use the newest article minus how much we should get for new groups.
                    $first = (string) ($groupNNTP['last'] - ($this->_newGroupMessagesToScan + $this->messageBuffer));
                }
            }
            // We will use this to subtract so we leave articles for the next time (in case the server doesn't have them yet)
            $leaveOver = $this->messageBuffer;
            // If this is not a new group, go from our newest to the servers newest.
        } else {
            // Set our oldest wanted to our newest local article.
            $first = $groupMySQL['last_record'];
            // This is how many articles we will grab. (the servers newest minus our newest).
            $totalCount = (string) ($groupNNTP['last'] - $first);
            // Check if the server has more articles than our loop limit x 2.
            if ($totalCount > $this->messageBuffer * 2) {
                // Get the remainder of $totalCount / $this->message buffer
                $leaveOver = round($totalCount % $this->messageBuffer, 0, PHP_ROUND_HALF_DOWN) + $this->messageBuffer;
            } else {
                // Else get half of the available.
                $leaveOver = round($totalCount / 2, 0, PHP_ROUND_HALF_DOWN);
            }
        }
        // The last article we want, aka the newest.
        $last = $groupLast = (string) ($groupNNTP['last'] - $leaveOver);
        // If the newest we want is older than the oldest we want somehow.. set them equal.
        if ($last < $first) {
            $last = $groupLast = $first;
        }
        // This is how many articles we are going to get.
        $total = (string) ($groupLast - $first);
        // This is how many articles are available (without $leaveOver).
        $realTotal = (string) ($groupNNTP['last'] - $first);
        // Check if we should limit the amount of fetched new headers.
        if ($maxHeaders > 0) {
            if ($maxHeaders < $groupLast - $first) {
                $groupLast = $last = (string) ($first + $maxHeaders);
            }
            $total = (string) ($groupLast - $first);
        }
        // If total is bigger than 0 it means we have new parts in the newsgroup.
        if ($total > 0) {
            if ($this->_echoCLI) {
                $this->_colorCLI->doEcho($this->_colorCLI->primary(($groupMySQL['last_record'] == 0 ? 'New group ' . $groupNNTP['group'] . ' starting with ' . ($this->_newGroupScanByDays ? $this->_newGroupDaysToScan . ' days' : number_format($this->_newGroupMessagesToScan) . ' messages') . ' worth.' : 'Group ' . $groupNNTP['group'] . ' has ' . number_format($realTotal) . ' new articles.') . ' Leaving ' . number_format($leaveOver) . " for next pass.\nServer oldest: " . number_format($groupNNTP['first']) . ' Server newest: ' . number_format($groupNNTP['last']) . ' Local newest: ' . number_format($groupMySQL['last_record'])), true);
            }
            $done = false;
            // Get all the parts (in portions of $this->messageBuffer to not use too much memory).
            while ($done === false) {
                // Increment last until we reach $groupLast (group newest article).
                if ($total > $this->messageBuffer) {
                    if ((string) ($first + $this->messageBuffer) > $groupLast) {
                        $last = $groupLast;
                    } else {
                        $last = (string) ($first + $this->messageBuffer);
                    }
                }
                // Increment first so we don't get an article we already had.
                $first++;
                if ($this->_echoCLI) {
                    $this->_colorCLI->doEcho($this->_colorCLI->header("\nGetting " . number_format($last - $first + 1) . ' articles (' . number_format($first) . ' to ' . number_format($last) . ') from ' . $groupMySQL['name'] . " - (" . number_format($groupLast - $last) . " articles in queue)."));
                }
                // Get article headers from newsgroup.
                $scanSummary = $this->scan($groupMySQL, $first, $last);
                // Check if we fetched headers.
                if (!empty($scanSummary)) {
                    // If new group, update first record & postdate
                    if (is_null($groupMySQL['first_record_postdate']) && $groupMySQL['first_record'] == 0) {
                        $groupMySQL['first_record'] = $scanSummary['firstArticleNumber'];
                        if (isset($scanSummary['firstArticleDate'])) {
                            $groupMySQL['first_record_postdate'] = strtotime($scanSummary['firstArticleDate']);
                        } else {
                            $groupMySQL['first_record_postdate'] = $this->postdate($groupMySQL['first_record'], $groupNNTP);
                        }
                        $this->_pdo->queryExec(sprintf('
								UPDATE groups
								SET first_record = %s, first_record_postdate = %s
								WHERE id = %d', $scanSummary['firstArticleNumber'], $this->_pdo->from_unixtime($this->_pdo->escapeString($groupMySQL['first_record_postdate'])), $groupMySQL['id']));
                    }
                    if (isset($scanSummary['lastArticleDate'])) {
                        $scanSummary['lastArticleDate'] = strtotime($scanSummary['lastArticleDate']);
                    } else {
                        $scanSummary['lastArticleDate'] = $this->postdate($scanSummary['lastArticleNumber'], $groupNNTP);
                    }
                    $this->_pdo->queryExec(sprintf('
							UPDATE groups
							SET last_record = %s, last_record_postdate = %s, last_updated = NOW()
							WHERE id = %d', $this->_pdo->escapeString($scanSummary['lastArticleNumber']), $this->_pdo->from_unixtime($scanSummary['lastArticleDate']), $groupMySQL['id']));
                } else {
                    // If we didn't fetch headers, update the record still.
                    $this->_pdo->queryExec(sprintf('
							UPDATE groups
							SET last_record = %s, last_updated = NOW()
							WHERE id = %d', $this->_pdo->escapeString($last), $groupMySQL['id']));
                }
                if ($last == $groupLast) {
                    $done = true;
                } else {
                    $first = $last;
                }
            }
            if ($this->_echoCLI) {
                $this->_colorCLI->doEcho($this->_colorCLI->primary(PHP_EOL . 'Group ' . $groupMySQL['name'] . ' processed in ' . number_format(microtime(true) - $startGroup, 2) . ' seconds.'), true);
            }
        } else {
            if ($this->_echoCLI) {
                $this->_colorCLI->doEcho($this->_colorCLI->primary('No new articles for ' . $groupMySQL['name'] . ' (first ' . number_format($first) . ', last ' . number_format($last) . ', grouplast ' . number_format($groupMySQL['last_record']) . ', total ' . number_format($total) . ")\n" . 'Server oldest: ' . number_format($groupNNTP['first']) . ' Server newest: ' . number_format($groupNNTP['last']) . ' Local newest: ' . number_format($groupMySQL['last_record'])), true);
            }
        }
    }
<?php

require_once realpath(dirname(dirname(dirname(__DIR__))) . DIRECTORY_SEPARATOR . 'indexer.php');
use nzedb\ColorCLI;
use nzedb\db\Settings;
$cli = new ColorCLI();
$pdo = new Settings(['checkVersion' => true]);
$ftinnodb = $pdo->isDbVersionAtLeast('5.6');
if (isset($argv[1]) && isset($argv[2]) && $argv[2] == "fmyisam") {
    $tbl = $argv[1];
    printf($cli->header("Converting {$tbl}"));
    $pdo->queryExec("ALTER TABLE {$tbl} ENGINE=MYISAM ROW_FORMAT=FIXED");
} else {
    if (isset($argv[1]) && isset($argv[2]) && $argv[2] == "dmyisam") {
        $tbl = $argv[1];
        printf($cli->header("Converting {$tbl}"));
        $pdo->queryExec("ALTER TABLE {$tbl} ENGINE=MYISAM ROW_FORMAT=DYNAMIC");
    } else {
        if (isset($argv[1]) && isset($argv[2]) && $argv[2] == "cinnodb") {
            $tbl = $argv[1];
            if ($ftinnodb || !$ftinnodb && $tbl !== 'release_search_data' && $tbl !== 'predb_hashes' && $tbl !== 'bookinfo' && $tbl !== 'consoleinfo' && $tbl !== 'musicinfo') {
                printf($cli->header("Converting {$tbl}"));
                $pdo->queryExec("ALTER TABLE {$tbl} ENGINE=INNODB ROW_FORMAT=COMPRESSED");
            } else {
                printf($cli->header("Not converting bookinfo / consoleinfo / musicinfo / release_search_data / predb_hashes as your INNODB version does not support fulltext indexes"));
            }
        } else {
            if (isset($argv[1]) && isset($argv[2]) && $argv[2] == "dinnodb") {
                $tbl = $argv[1];
                if ($ftinnodb || !$ftinnodb && $tbl !== 'release_search_data' && $tbl !== 'predb_hashes' && $tbl !== 'bookinfo' && $tbl !== 'consoleinfo' && $tbl !== 'musicinfo') {
                    printf($cli->header("Converting {$tbl}"));
Exemple #4
0
use nzedb\db\Settings;
use nzedb\utility\Misc;
$pdo = new Settings();
$DIR = nZEDb_MISC;
$smarty = new Smarty();
$dbname = DB_NAME;
$cli = new ColorCLI();
if (isset($argv[1]) && ($argv[1] == "true" || $argv[1] == "safe")) {
    $restart = (new Tmux())->stopIfRunning();
    system("cd {$DIR} && git pull");
    if (Misc::hasCommand("php5")) {
        $PHP = "php5";
    } else {
        $PHP = "php";
    }
    echo $cli->header("Patching database - {$dbname}.");
    $safe = $argv[1] === "safe" ? true : false;
    system("{$PHP} " . nZEDb_ROOT . 'cli' . DS . "update_db.php true {$safe}");
    // Remove folders from smarty.
    $cleared = $smarty->clearCompiledTemplate();
    if ($cleared) {
        echo $cli->header("The smarty template cache has been cleaned for you");
    } else {
        echo $cli->header("You should clear your smarty template cache at: " . SMARTY_DIR . "templates_c");
    }
    if ($restart) {
        echo $cli->header("Starting tmux scripts.");
        $pdo->queryExec("UPDATE tmux SET value = '1' WHERE setting = 'RUNNING'");
    }
} else {
    exit($cli->error("\nThis script will automatically do a git pull, patch the DB and delete the smarty folder contents.\n\n" . "php {$argv['0']} true   ...: To run.\n" . "php {$argv['0']} safe   ...: Tto run a backup of your database and then update.\n"));
<?php

require_once realpath(dirname(dirname(dirname(__DIR__))) . DIRECTORY_SEPARATOR . 'indexer.php');
use nzedb\ColorCLI;
use nzedb\db\Settings;
$pdo = new Settings();
$count = $groups = 0;
$cli = new ColorCLI();
echo $cli->header("This script will show all Backfill Groups.\n" . "An optional first argument of ASC/DESC is used to sort the display by first_record_postdate in ascending/descending order.\n" . "An optional second argument will limit the return to that number of groups.\n\n" . "php {$argv['0']} true 20    ...: To sort the backfill groups by first_record_postdate and display only 20 groups.\n");
$limit = "";
if (isset($argv[2]) && is_numeric($argv[2])) {
    $limit = "limit " . $argv[2];
} else {
    if (isset($argv[1]) && is_numeric($argv[1])) {
        $limit = "limit " . $argv[1];
    }
}
$mask = $cli->primary("%-50.50s %22.22s %22.22s %22.22s %22.22s");
$mask1 = $cli->header("%-50.50s %22.22s %22.22s %22.22s %22.22s");
$groups = $pdo->queryOneRow("SELECT COUNT(*) AS count FROM groups WHERE backfill = 1 AND first_record IS NOT NULL");
if ($rels = $pdo->query("SELECT last_updated, last_updated, CAST(last_record AS SIGNED)-CAST(first_record AS SIGNED) AS headers_downloaded FROM groups")) {
    foreach ($rels as $rel) {
        $count += $rel['headers_downloaded'];
    }
}
printf($mask1, "Group Name => " . $groups['count'] . "(" . number_format($count) . " downloaded)", "Backfilled Days", "Oldest Post", "Last Updated", "Headers Downloaded");
printf($mask1, "==================================================", "======================", "======================", "======================", "======================");
if (isset($argv[1]) && ($argv[1] === "desc" || $argv[1] === "DESC")) {
    if ($rels = $pdo->query(sprintf("SELECT name, backfill_target, first_record_postdate, last_updated, last_updated, " . "CAST(last_record AS SIGNED)-CAST(first_record AS SIGNED) AS headers_downloaded, " . "TIMESTAMPDIFF(DAY,first_record_postdate,NOW()) AS days FROM groups " . "WHERE backfill = 1 AND first_record_postdate IS NOT NULL AND last_updated IS NOT NULL " . "AND last_updated IS NOT NULL ORDER BY first_record_postdate DESC %s", $limit))) {
        foreach ($rels as $rel) {
            $headers = number_format($rel['headers_downloaded']);
Exemple #6
0
use nzedb\db\Settings;
$giantbombkey = (new Settings())->getSetting('giantbombkey');
$cli = new ColorCLI();
$obj = new GiantBomb($giantbombkey, $resp = "json");
$searchgame = "South Park The Stick of Truth";
$resultsfound = 0;
$e = null;
try {
    $fields = array("deck", "description", "original_game_rating", "api_detail_url", "image", "genres", "name", "platforms", "publishers", "original_release_date", "reviews", "site_detail_url");
    $result = $obj->search($searchgame, $fields, 1);
    $result = json_decode(json_encode($result), true);
    if ($result['number_of_total_results'] != 0) {
        $resultsfound = count($result['results']);
        for ($i = 0; $i <= $resultsfound; $i++) {
            similar_text($result['results'][$i]['name'], $searchgame, $p);
            if ($p > 90) {
                $result = $result['results'][$i];
                break;
            }
        }
    }
} catch (\Exception $e) {
    $result = false;
}
if ($result !== false && !empty($result)) {
    print_r($result);
    exit($cli->header("\nLooks like it is working alright."));
} else {
    print_r($e);
    exit($cli->error("\nThere was a problem attempting to query giantbomb. Maybe your key is wrong, or you are being throttled.\n"));
}