GContact discovery added

This commit is contained in:
Michael 2020-03-05 22:03:24 +00:00
parent bf35ff27d3
commit a6e7b5f295
7 changed files with 83 additions and 4 deletions

View file

@ -28,6 +28,7 @@ use Friendica\Core\Logger;
use Friendica\Core\Protocol;
use Friendica\Core\System;
use Friendica\Core\Search;
use Friendica\Core\Worker;
use Friendica\Database\DBA;
use Friendica\DI;
use Friendica\Network\Probe;
@ -1275,6 +1276,75 @@ class GContact
}
}
/**
* Fetches the followers of a given profile and adds them
*
* @param string $url URL of a profile
* @return void
*/
public static function discoverFollowers(string $url)
{
$apcontact = APContact::getByURL($url);
if (!empty($apcontact['followers']) && is_string($apcontact['followers'])) {
$followers = ActivityPub::fetchItems($apcontact['followers']);
Logger::info('Discover AP followers', ['url' => $url, 'contacts' => count($followers)]);
foreach ($followers as $follower) {
if (DBA::exists('gcontact', ['nurl' => Strings::normaliseLink(($follower))])) {
continue;
}
Logger::info('Discover new AP contact', ['url' => $follower]);
Worker::add(PRIORITY_LOW, 'UpdateGContact', $follower);
}
Logger::info('AP followers discovery finished', ['url' => $url]);
}
if (!empty($apcontact['following']) && is_string($apcontact['following'])) {
$followings = ActivityPub::fetchItems($apcontact['following']);
Logger::info('Discover AP followings', ['url' => $url, 'contacts' => count($followings)]);
foreach ($followings as $following) {
if (DBA::exists('gcontact', ['nurl' => Strings::normaliseLink(($following))])) {
continue;
}
Logger::info('Discover new AP contact', ['url' => $following]);
Worker::add(PRIORITY_LOW, 'UpdateGContact', $following);
}
Logger::info('AP followings discovery finished', ['url' => $url]);
}
$data = Probe::uri($url);
if (empty($data['poco'])) {
return;
}
$curlResult = Network::curl($data['poco']);
if (!$curlResult->isSuccess()) {
return;
}
$poco = json_decode($curlResult->getBody(), true);
if (empty($poco['entry'])) {
return;
}
Logger::info('PoCo Discovery started', ['url' => $url, 'contacts' => count($poco['entry'])]);
foreach ($poco['entry'] as $entries) {
if (!empty($entries['urls'])) {
foreach ($entries['urls'] as $url) {
if ($url['type'] == 'profile') {
if (DBA::exists('gcontact', ['nurl' => Strings::normaliseLink(($url['value']))])) {
continue;
}
Logger::info('Discover new PoCo contact', ['url' => $$url['value']]);
Worker::add(PRIORITY_LOW, 'UpdateGContact', $$url['value']);
}
}
}
}
Logger::info('PoCo Discovery finished', ['url' => $url]);
}
/**
* Returns a random, global contact of the current node
*