diff options
author | call-me-matt <nextcloud@matthiasheinisch.de> | 2020-10-20 23:13:44 +0200 |
---|---|---|
committer | call-me-matt <nextcloud@matthiasheinisch.de> | 2020-10-20 23:13:44 +0200 |
commit | 6b127fc269f92d220d7a318295c7e8368657f598 (patch) | |
tree | 59d9905844b5e67fb760012c5f1d290e622c8156 /lib/Service | |
parent | 64c4d3f13098cd8c93fb2a30e1576c45437098f5 (diff) |
add xing to social sync
Signed-off-by: call-me-matt <nextcloud@matthiasheinisch.de>
Diffstat (limited to 'lib/Service')
-rw-r--r-- | lib/Service/Social/CompositeSocialProvider.php | 4 | ||||
-rw-r--r-- | lib/Service/Social/XingProvider.php | 82 |
2 files changed, 85 insertions, 1 deletions
diff --git a/lib/Service/Social/CompositeSocialProvider.php b/lib/Service/Social/CompositeSocialProvider.php index bca9939d..40d937e6 100644 --- a/lib/Service/Social/CompositeSocialProvider.php +++ b/lib/Service/Social/CompositeSocialProvider.php @@ -36,7 +36,8 @@ class CompositeSocialProvider { FacebookProvider $facebookProvider, TwitterProvider $twitterProvider, TumblrProvider $tumblrProvider, - DiasporaProvider $diasporaProvider) { + DiasporaProvider $diasporaProvider, + XingProvider $xingProvider) { // This determines the priority of known providers $this->providers = [ @@ -46,6 +47,7 @@ class CompositeSocialProvider { 'facebook' => $facebookProvider, 'tumblr' => $tumblrProvider, 'diaspora' => $diasporaProvider, + 'xing' => $xingProvider, ]; } diff --git a/lib/Service/Social/XingProvider.php b/lib/Service/Social/XingProvider.php new file mode 100644 index 00000000..739d1fd2 --- /dev/null +++ b/lib/Service/Social/XingProvider.php @@ -0,0 +1,82 @@ +<?php +/** + * @copyright Copyright (c) 2020 Matthias Heinisch <nextcloud@matthiasheinisch.de> + * + * @author Matthias Heinisch <nextcloud@matthiasheinisch.de> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +namespace OCA\Contacts\Service\Social; + +use OCP\Http\Client\IClientService; + +class XingProvider implements ISocialProvider { + + /** @var IClientService */ + private $httpClient; + + /** @var boolean */ + private $looping; + + public function __construct(IClientService $httpClient) { + $this->httpClient = $httpClient->NewClient(); + $this->looping = false; + } + + /** + * Returns the profile-id + * + * @param {string} the value from the contact's x-socialprofile + * + * @return string + */ + public function cleanupId(string $candidate):string { + $candidate = preg_replace('/^' . preg_quote('x-apple:', '/') . '/', '', $candidate); + try { + if (strpos($candidate, 'http') !== 0) { + $candidate = 'https://www.xing.com/profile/' . $candidate; + } + } catch (Exception $e) { + $candidate = null; + } + return $candidate; + } + + /** + * Returns the profile-picture url + * + * @param {string} profileId the profile-id + * + * @return string|null + */ + public function getImageUrl(string $profileUrl):?string { + try { + $result = $this->httpClient->get($profileUrl); + $htmlResult = $result->getBody(); + + $avatar = '/.*src="(https:\/\/profile-images[a-zA-Z0-9\/.\-_]+\.jpg)".*/'; + if (preg_match($avatar, $htmlResult, $matches)) { + return $matches[1]; + } + // keyword not found, maybe page changed? + return null; + } catch (Exception $e) { + return null; + } + } +} |