$id, 'url' => analyzeToot($instance, $id, $searchurl)); } write_db($dbt, $toots); } else { out("No new toots found"); } /* 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 = $toots[end($id)]['id']; // TODO: graceful exit if no toot exists $id = "102955148581768112"; // TODO test /* 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) { out("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 header('Cache-Control: no-cache, must-revalidate'); header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // headers to tell that result is JSON header('Content-type: application/json'); echo json_encode($result); ?>