restructure file
This commit is contained in:
@@ -5,10 +5,12 @@ $instance = $config['mastodon-instance'];
|
||||
$uid = $config['user-id'];
|
||||
$searchurl = $config['search-url'];
|
||||
$search = isset($_GET['search']) ? $_GET['search'] : '';
|
||||
$debug_on = true;
|
||||
$debug_on = $config['debug'];
|
||||
/* cache files */
|
||||
$dbt = "cache-toots.json";
|
||||
|
||||
$timestamp = time();
|
||||
|
||||
/* Exit if search empty */
|
||||
if (empty($search)) {
|
||||
debug("No proper search given");
|
||||
@@ -65,7 +67,57 @@ function analyzeToot($instance, $id, $searchurl) {
|
||||
return("");
|
||||
}
|
||||
}
|
||||
/* of context, extract the interesting bits */
|
||||
function filterComments($descendants, $root, &$result) {
|
||||
foreach ($descendants as $d) {
|
||||
$result['comments'][$d['id']] = [
|
||||
'author' => [
|
||||
'display_name' => $d['account']['display_name'] ? $d['account']['display_name'] : $d['account']['username'],
|
||||
'avatar' => $d['account']['avatar_static'],
|
||||
'url' => $d['account']['url']
|
||||
],
|
||||
'toot' => $d['content'],
|
||||
'date' => $d['created_at'],
|
||||
'url' => $d['uri'],
|
||||
'reply_to' => $d['in_reply_to_id'],
|
||||
'root' => $root,
|
||||
];
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
/* get /context of toot */
|
||||
function tootContext($instance, $id, &$result) {
|
||||
$raw = file_get_contents("$instance/api/v1/statuses/$id/context");
|
||||
$json = json_decode($raw, true);
|
||||
filterComments($json['descendants'], $id, $result);
|
||||
}
|
||||
/* extract stats info from toot */
|
||||
function filterStats($stats) {
|
||||
$result = [
|
||||
'reblogs' => (int)$stats['reblogs_count'],
|
||||
'favs' => (int)$stats['favourites_count'],
|
||||
'replies' => (int)$stats['replies_count'],
|
||||
'url' => $stats['url']
|
||||
];
|
||||
return $result;
|
||||
}
|
||||
/* for toot, extract interesting statistics */
|
||||
function tootStats($instance, $id, &$result) {
|
||||
debug("Checking ID $id");
|
||||
$raw = file_get_contents("$instance/api/v1/statuses/$id");
|
||||
$json = json_decode($raw, true);
|
||||
$newStats = filterStats($json);
|
||||
$result['stats']['reblogs'] += $newStats['reblogs'];
|
||||
$result['stats']['favs'] += $newStats['favs'];
|
||||
$result['stats']['replies'] += $newStats['replies'];
|
||||
if (empty($result['stats']['url'])) {
|
||||
$result['stats']['url'] = $newStats['url'];
|
||||
}
|
||||
}
|
||||
|
||||
/***************
|
||||
* START PROGRAM
|
||||
***************/
|
||||
|
||||
/* Collect all the toots */
|
||||
/* get id of latest cached toot, and set as $min_id */
|
||||
@@ -86,6 +138,7 @@ $uptodate = false;
|
||||
while ($uptodate === false) {
|
||||
$toots = array_merge(collectToots($instance, $uid, $min_id, $searchurl), $toots);
|
||||
$min_id_new = $toots['0']['id']; // the latest ID of the recent search
|
||||
|
||||
if ($min_id_new === $min_id) {
|
||||
// min_id is the latest, let's write the new DB and end this loop
|
||||
$uptodate = true;
|
||||
@@ -98,71 +151,25 @@ while ($uptodate === false) {
|
||||
}
|
||||
}
|
||||
|
||||
/* prepare $result array */
|
||||
$result = ['comments' => [], 'stats' => ['reblogs' => 0, 'favs' => 0, 'replies' => 0, 'url' => '', 'root' => 0]];
|
||||
|
||||
/* check if URL from $search exists in $toots */
|
||||
// if multiple exist, take the oldest one (highest array position)
|
||||
$id = array_keys(array_column($toots, 'url'), strtolower($search));
|
||||
if (empty($id)) {
|
||||
debug("Blog URL \"$search\" has not been found");
|
||||
die();
|
||||
}
|
||||
} else {
|
||||
// if multiple exist, take the oldest one (highest array position)
|
||||
$id = $toots[end($id)]['id'];
|
||||
|
||||
/* Extract comments and stats from toot */
|
||||
$result = ['comments' => [], 'stats' => ['reblogs' => 0, 'favs' => 0, 'replies' => 0, 'url' => '', 'root' => 0]];
|
||||
|
||||
function filterComments($descendants, $root, &$result) {
|
||||
foreach ($descendants as $d) {
|
||||
$result['comments'][$d['id']] = [
|
||||
'author' => [
|
||||
'display_name' => $d['account']['display_name'] ? $d['account']['display_name'] : $d['account']['username'],
|
||||
'avatar' => $d['account']['avatar_static'],
|
||||
'url' => $d['account']['url']
|
||||
],
|
||||
'toot' => $d['content'],
|
||||
'date' => $d['created_at'],
|
||||
'url' => $d['uri'],
|
||||
'reply_to' => $d['in_reply_to_id'],
|
||||
'root' => $root,
|
||||
];
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
|
||||
function tootContext($instance, $id, &$result) {
|
||||
$raw = file_get_contents("$instance/api/v1/statuses/$id/context");
|
||||
$json = json_decode($raw, true);
|
||||
filterComments($json['descendants'], $id, $result);
|
||||
}
|
||||
|
||||
function filterStats($stats) {
|
||||
$result = [
|
||||
'reblogs' => (int)$stats['reblogs_count'],
|
||||
'favs' => (int)$stats['favourites_count'],
|
||||
'replies' => (int)$stats['replies_count'],
|
||||
'url' => $stats['url']
|
||||
];
|
||||
return $result;
|
||||
}
|
||||
|
||||
function tootStats($instance, $id, &$result) {
|
||||
debug("Checking ID $id");
|
||||
$raw = file_get_contents("$instance/api/v1/statuses/$id");
|
||||
$json = json_decode($raw, true);
|
||||
$newStats = filterStats($json);
|
||||
$result['stats']['reblogs'] += $newStats['reblogs'];
|
||||
$result['stats']['favs'] += $newStats['favs'];
|
||||
$result['stats']['replies'] += $newStats['replies'];
|
||||
if (empty($result['stats']['url'])) {
|
||||
$result['stats']['url'] = $newStats['url'];
|
||||
}
|
||||
}
|
||||
|
||||
tootContext($instance, $id, $result);
|
||||
tootStats($instance, $id, $result);
|
||||
// FIXME: At the moment the API doesn't return the correct replies count so I count it manually
|
||||
$result['stats']['replies'] = count($result['comments']);
|
||||
$result['stats']['root'] = $id;
|
||||
tootContext($instance, $id, $result);
|
||||
tootStats($instance, $id, $result);
|
||||
|
||||
}
|
||||
|
||||
// headers for not caching the results
|
||||
header('Cache-Control: no-cache, must-revalidate');
|
||||
|
||||
Reference in New Issue
Block a user