diff options
author | call-me-matt <nextcloud@matthiasheinisch.de> | 2020-10-10 13:30:04 +0200 |
---|---|---|
committer | call-me-matt <nextcloud@matthiasheinisch.de> | 2020-10-12 07:22:45 +0200 |
commit | e3814b742ce46d49d0d17e66d719eb91b76e2193 (patch) | |
tree | 79002bd9bab0589c786b0257c616d56e4d90e97e | |
parent | 1494d93f8e18b310ac950f27f9900b8207b2de64 (diff) |
more robust social ids
- get facebook id from usernames
- accept mastodon usernames without leading at
- ignore iOS marker as in 1107#issuecomment-706518724
Signed-off-by: call-me-matt <nextcloud@matthiasheinisch.de>
-rw-r--r-- | lib/Service/Social/FacebookProvider.php | 16 | ||||
-rw-r--r-- | lib/Service/Social/InstagramProvider.php | 1 | ||||
-rw-r--r-- | lib/Service/Social/MastodonProvider.php | 5 | ||||
-rw-r--r-- | lib/Service/Social/TumblrProvider.php | 1 |
4 files changed, 10 insertions, 13 deletions
diff --git a/lib/Service/Social/FacebookProvider.php b/lib/Service/Social/FacebookProvider.php index 028b1dcc..770ac45a 100644 --- a/lib/Service/Social/FacebookProvider.php +++ b/lib/Service/Social/FacebookProvider.php @@ -78,17 +78,11 @@ class FacebookProvider implements ISocialProvider { if ($result->getStatusCode() !== 200) { return $profileName; } - $htmlResult = new \DOMDocument(); - $htmlResult->loadHTML($result->getBody()); - $metas = $htmlResult->getElementsByTagName('meta'); - foreach ($metas as $meta) { - foreach ($meta->attributes as $attr) { - $value = $attr->nodeValue; - if (strpos($value, "/profile/")) { - $value = str_replace('fb://profile/', '', $value); - return($value); - } - } + $htmlResult = $result->getBody(); + + $entity_id = '/.*"entity_id":"([0-9]+)".*/'; + if (preg_match($entity_id, $htmlResult, $matches)) { + return($matches[1]); } // keyword not found - page changed? return $profileName; diff --git a/lib/Service/Social/InstagramProvider.php b/lib/Service/Social/InstagramProvider.php index 36c5a3d6..b7687e71 100644 --- a/lib/Service/Social/InstagramProvider.php +++ b/lib/Service/Social/InstagramProvider.php @@ -42,6 +42,7 @@ class InstagramProvider implements ISocialProvider { * @return string */ public function cleanupId(string $candidate):string { + $candidate = preg_replace('/^' . preg_quote('x-apple:', '/') . '/', '', $candidate); return basename($candidate); } diff --git a/lib/Service/Social/MastodonProvider.php b/lib/Service/Social/MastodonProvider.php index bcbde9f3..74b68e96 100644 --- a/lib/Service/Social/MastodonProvider.php +++ b/lib/Service/Social/MastodonProvider.php @@ -42,10 +42,11 @@ class MastodonProvider implements ISocialProvider { * @return string */ public function cleanupId(string $candidate):?string { + $candidate = preg_replace('/^' . preg_quote('x-apple:', '/') . '/', '', $candidate); try { - if (strpos($candidate, '@') === 0) { + if (strpos($candidate, 'http') !== 0) { $user_server = explode('@', $candidate); - $candidate = 'https://' . $user_server[2] . '/@' . $user_server[1]; + $candidate = 'https://' . array_pop($user_server) . '/@' . array_pop($user_server); } } catch (Exception $e) { $candidate = null; diff --git a/lib/Service/Social/TumblrProvider.php b/lib/Service/Social/TumblrProvider.php index 71f2fa71..a830b945 100644 --- a/lib/Service/Social/TumblrProvider.php +++ b/lib/Service/Social/TumblrProvider.php @@ -35,6 +35,7 @@ class TumblrProvider implements ISocialProvider { * @return string */ public function cleanupId(string $candidate):?string { + $candidate = preg_replace('/^' . preg_quote('x-apple:', '/') . '/', '', $candidate); $subdomain = '/(?:http[s]*\:\/\/)*(.*?)\.(?=[^\/]*\..{2,5})/i'; // subdomain if (preg_match($subdomain, $candidate, $matches)) { $candidate = $matches[1]; |