mirror of
https://github.com/pixelfed/pixelfed.git
synced 2024-11-22 06:21:27 +00:00
Update discover, add network trending using Beagle API
This commit is contained in:
parent
ecf22b54d5
commit
2cae8b48de
3 changed files with 78 additions and 5 deletions
|
@ -11,6 +11,7 @@ use App\Services\BookmarkService;
|
||||||
use App\Services\ConfigCacheService;
|
use App\Services\ConfigCacheService;
|
||||||
use App\Services\FollowerService;
|
use App\Services\FollowerService;
|
||||||
use App\Services\HashtagService;
|
use App\Services\HashtagService;
|
||||||
|
use App\Services\Internal\BeagleService;
|
||||||
use App\Services\LikeService;
|
use App\Services\LikeService;
|
||||||
use App\Services\ReblogService;
|
use App\Services\ReblogService;
|
||||||
use App\Services\SnowflakeService;
|
use App\Services\SnowflakeService;
|
||||||
|
@ -420,4 +421,11 @@ class DiscoverController extends Controller
|
||||||
|
|
||||||
return response()->json($ids, 200, [], JSON_UNESCAPED_SLASHES);
|
return response()->json($ids, 200, [], JSON_UNESCAPED_SLASHES);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function discoverNetworkTrending(Request $request)
|
||||||
|
{
|
||||||
|
abort_if(! $request->user(), 404);
|
||||||
|
|
||||||
|
return BeagleService::getDiscoverPosts();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,18 +2,23 @@
|
||||||
|
|
||||||
namespace App\Services\Internal;
|
namespace App\Services\Internal;
|
||||||
|
|
||||||
use Illuminate\Support\Facades\Cache;
|
use App\Services\InstanceService;
|
||||||
use Illuminate\Support\Facades\Http;
|
use App\Services\StatusService;
|
||||||
|
use App\Util\ActivityPub\Helpers;
|
||||||
use Illuminate\Http\Client\ConnectionException;
|
use Illuminate\Http\Client\ConnectionException;
|
||||||
use Illuminate\Http\Client\RequestException;
|
use Illuminate\Http\Client\RequestException;
|
||||||
|
use Illuminate\Support\Facades\Cache;
|
||||||
|
use Illuminate\Support\Facades\Http;
|
||||||
|
|
||||||
class BeagleService
|
class BeagleService
|
||||||
{
|
{
|
||||||
const DEFAULT_RULES_CACHE_KEY = 'pf:services:beagle:default_rules:v1';
|
const DEFAULT_RULES_CACHE_KEY = 'pf:services:beagle:default_rules:v1';
|
||||||
|
|
||||||
|
const DISCOVER_CACHE_KEY = 'pf:services:beagle:discover:v1';
|
||||||
|
|
||||||
public static function getDefaultRules()
|
public static function getDefaultRules()
|
||||||
{
|
{
|
||||||
return Cache::remember(self::DEFAULT_RULES_CACHE_KEY, now()->addDays(7), function() {
|
return Cache::remember(self::DEFAULT_RULES_CACHE_KEY, now()->addDays(7), function () {
|
||||||
try {
|
try {
|
||||||
$res = Http::withOptions(['allow_redirects' => false])
|
$res = Http::withOptions(['allow_redirects' => false])
|
||||||
->timeout(5)
|
->timeout(5)
|
||||||
|
@ -28,17 +33,76 @@ class BeagleService
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!$res->ok()) {
|
if (! $res->ok()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
$json = $res->json();
|
$json = $res->json();
|
||||||
|
|
||||||
if(!isset($json['rule_suggestions']) || !count($json['rule_suggestions'])) {
|
if (! isset($json['rule_suggestions']) || ! count($json['rule_suggestions'])) {
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
|
|
||||||
return $json['rule_suggestions'];
|
return $json['rule_suggestions'];
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static function getDiscover()
|
||||||
|
{
|
||||||
|
return Cache::remember(self::DISCOVER_CACHE_KEY, now()->addHours(6), function () {
|
||||||
|
try {
|
||||||
|
$res = Http::withOptions(['allow_redirects' => false])
|
||||||
|
->withHeaders([
|
||||||
|
'X-Pixelfed-Api' => 1,
|
||||||
|
])->timeout(5)
|
||||||
|
->connectTimeout(5)
|
||||||
|
->retry(2, 500)
|
||||||
|
->get('https://beagle.pixelfed.net/api/v1/discover');
|
||||||
|
} catch (RequestException $e) {
|
||||||
|
return;
|
||||||
|
} catch (ConnectionException $e) {
|
||||||
|
return;
|
||||||
|
} catch (Exception $e) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (! $res->ok()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$json = $res->json();
|
||||||
|
|
||||||
|
if (! isset($json['statuses']) || ! count($json['statuses'])) {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
|
return $json['statuses'];
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function getDiscoverPosts()
|
||||||
|
{
|
||||||
|
$posts = collect(self::getDiscover())
|
||||||
|
->filter(function ($post) {
|
||||||
|
$bannedInstances = InstanceService::getBannedDomains();
|
||||||
|
$domain = parse_url($post['id'], PHP_URL_HOST);
|
||||||
|
|
||||||
|
return ! in_array($domain, $bannedInstances);
|
||||||
|
})
|
||||||
|
->map(function ($post) {
|
||||||
|
$domain = parse_url($post['id'], PHP_URL_HOST);
|
||||||
|
if ($domain === config_cache('pixelfed.domain.app')) {
|
||||||
|
$parts = explode('/', $post['id']);
|
||||||
|
$id = array_last($parts);
|
||||||
|
|
||||||
|
return StatusService::get($id);
|
||||||
|
}
|
||||||
|
|
||||||
|
return Helpers::statusFetch($post['id']);
|
||||||
|
})
|
||||||
|
->values()
|
||||||
|
->toArray();
|
||||||
|
|
||||||
|
return $posts;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -177,6 +177,7 @@ Route::group(['prefix' => 'api'], function() use($middleware) {
|
||||||
Route::get('accounts/popular', 'Api\ApiV1Controller@discoverAccountsPopular')->middleware($middleware);
|
Route::get('accounts/popular', 'Api\ApiV1Controller@discoverAccountsPopular')->middleware($middleware);
|
||||||
Route::get('posts/trending', 'DiscoverController@trendingApi')->middleware($middleware);
|
Route::get('posts/trending', 'DiscoverController@trendingApi')->middleware($middleware);
|
||||||
Route::get('posts/hashtags', 'DiscoverController@trendingHashtags')->middleware($middleware);
|
Route::get('posts/hashtags', 'DiscoverController@trendingHashtags')->middleware($middleware);
|
||||||
|
Route::get('posts/network/trending', 'DiscoverController@discoverNetworkTrending')->middleware($middleware);
|
||||||
});
|
});
|
||||||
|
|
||||||
Route::group(['prefix' => 'directory'], function () use($middleware) {
|
Route::group(['prefix' => 'directory'], function () use($middleware) {
|
||||||
|
|
Loading…
Reference in a new issue