restructure file
This commit is contained in:
@@ -5,10 +5,12 @@ $instance = $config['mastodon-instance'];
|
|||||||
$uid = $config['user-id'];
|
$uid = $config['user-id'];
|
||||||
$searchurl = $config['search-url'];
|
$searchurl = $config['search-url'];
|
||||||
$search = isset($_GET['search']) ? $_GET['search'] : '';
|
$search = isset($_GET['search']) ? $_GET['search'] : '';
|
||||||
$debug_on = true;
|
$debug_on = $config['debug'];
|
||||||
/* cache files */
|
/* cache files */
|
||||||
$dbt = "cache-toots.json";
|
$dbt = "cache-toots.json";
|
||||||
|
|
||||||
|
$timestamp = time();
|
||||||
|
|
||||||
/* Exit if search empty */
|
/* Exit if search empty */
|
||||||
if (empty($search)) {
|
if (empty($search)) {
|
||||||
debug("No proper search given");
|
debug("No proper search given");
|
||||||
@@ -65,7 +67,57 @@ function analyzeToot($instance, $id, $searchurl) {
|
|||||||
return("");
|
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 */
|
/* Collect all the toots */
|
||||||
/* get id of latest cached toot, and set as $min_id */
|
/* get id of latest cached toot, and set as $min_id */
|
||||||
@@ -86,6 +138,7 @@ $uptodate = false;
|
|||||||
while ($uptodate === false) {
|
while ($uptodate === false) {
|
||||||
$toots = array_merge(collectToots($instance, $uid, $min_id, $searchurl), $toots);
|
$toots = array_merge(collectToots($instance, $uid, $min_id, $searchurl), $toots);
|
||||||
$min_id_new = $toots['0']['id']; // the latest ID of the recent search
|
$min_id_new = $toots['0']['id']; // the latest ID of the recent search
|
||||||
|
|
||||||
if ($min_id_new === $min_id) {
|
if ($min_id_new === $min_id) {
|
||||||
// min_id is the latest, let's write the new DB and end this loop
|
// min_id is the latest, let's write the new DB and end this loop
|
||||||
$uptodate = true;
|
$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 */
|
/* 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));
|
$id = array_keys(array_column($toots, 'url'), strtolower($search));
|
||||||
if (empty($id)) {
|
if (empty($id)) {
|
||||||
debug("Blog URL \"$search\" has not been found");
|
debug("Blog URL \"$search\" has not been found");
|
||||||
die();
|
die();
|
||||||
|
} else {
|
||||||
|
// if multiple exist, take the oldest one (highest array position)
|
||||||
|
$id = $toots[end($id)]['id'];
|
||||||
|
|
||||||
|
/* Extract comments and stats from toot */
|
||||||
|
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;
|
||||||
}
|
}
|
||||||
$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'];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 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
|
// headers for not caching the results
|
||||||
header('Cache-Control: no-cache, must-revalidate');
|
header('Cache-Control: no-cache, must-revalidate');
|
||||||
|
|||||||
Reference in New Issue
Block a user