$user['prefs']['user_server_uri']]); try { $response = $request->request('GET', "/api/v1/timelines/public", [ 'headers' => [ 'Authorization' => 'Bearer ' . $user['prefs']['user_token'] ] ]); $responseBody = (string)$response->getBody(); $responseBody = json_decode($responseBody); $statuses = []; foreach($responseBody as $status) { if(count($status->tags) == 0) { continue; } $points = self::scoreStatus($status, $user, $client); if($points['points'] !== 0) { $statuses[] = $points; } } usort($statuses, function ($a, $b) { var_dump($a); // return 0 <=> 0; return $b['points'] <=> $a['points']; }); $database = new Databases($client); foreach($statuses as $status) { $response = $request->request('GET', "/api/v2/search?type=statuses&resolve=true&q=" . $status['post'], [ 'headers' => [ 'Authorization' => 'Bearer ' . $user['prefs']['user_token'] ] ]); $responseBody = (string)$response->getBody(); $responseBody = json_decode($responseBody); $result = $responseBody->statuses; if(isset($result[0])) { $result = $result[0]; var_dump($result); $database->createDocument(getenv('APPWRITE_DATABASE_ID'), 'suggested', 'unique()', [ 'post_link' => $status['post'], 'points' => $status['points'], 'local_link' => $user['prefs']['user_server_uri'] . "/@" . $result->account->acct . "/" . $result->id, 'user_id' => $user['$id'] ], [ \Appwrite\Permission::read(\Appwrite\Role::user($user['$id'])) ]); } } return $statuses; } catch (\GuzzleHttp\Exception\ClientException $e) { return [$e->getMessage()]; } } public static function scoreStatus($status, $user, $client) { $database = new Databases($client); $query = new Query(); $points = 0; foreach($status->tags as $tag) { $record = $database->listDocuments(getenv('APPWRITE_DATABASE_ID'), 'hashtags', [ $query->equal('user', $user['$id']), $query->equal('hashtag', $tag->name) ])['documents']; if(isset($record[0])) { $points += $record[0]['points']; } } return [ 'post' => $status->url, 'points' => $points ]; } }