Merge pull request #8741 from MrPetovan/task/hook-probe-detect
Add probe_detect hook
This commit is contained in:
commit
3e2ebcb1c7
2 changed files with 27 additions and 33 deletions
|
@ -466,6 +466,19 @@ Hook data is a `\FastRoute\RouterCollector` object that should be used to add ad
|
||||||
|
|
||||||
**Notice**: The class whose name is provided in the route handler must be reachable via auto-loader.
|
**Notice**: The class whose name is provided in the route handler must be reachable via auto-loader.
|
||||||
|
|
||||||
|
### probe_detect
|
||||||
|
|
||||||
|
Called before trying to detect the target network of a URL.
|
||||||
|
If any registered hook function sets the `result` key of the hook data array, it will be returned immediately.
|
||||||
|
Hook functions should also return immediately if the hook data contains an existing result.
|
||||||
|
|
||||||
|
Hook data:
|
||||||
|
|
||||||
|
- **uri** (input): the profile URI.
|
||||||
|
- **network** (input): the target network (can be empty for auto-detection).
|
||||||
|
- **uid** (input): the user to return the contact data for (can be empty for public contacts).
|
||||||
|
- **result** (output): Set by the hook function to indicate a successful detection.
|
||||||
|
|
||||||
## Complete list of hook callbacks
|
## Complete list of hook callbacks
|
||||||
|
|
||||||
Here is a complete list of all hook callbacks with file locations (as of 24-Sep-2018). Please see the source for details of any hooks not documented above.
|
Here is a complete list of all hook callbacks with file locations (as of 24-Sep-2018). Please see the source for details of any hooks not documented above.
|
||||||
|
|
|
@ -24,6 +24,7 @@ namespace Friendica\Network;
|
||||||
use DOMDocument;
|
use DOMDocument;
|
||||||
use DomXPath;
|
use DomXPath;
|
||||||
use Friendica\Core\Cache\Duration;
|
use Friendica\Core\Cache\Duration;
|
||||||
|
use Friendica\Core\Hook;
|
||||||
use Friendica\Core\Logger;
|
use Friendica\Core\Logger;
|
||||||
use Friendica\Core\Protocol;
|
use Friendica\Core\Protocol;
|
||||||
use Friendica\Core\System;
|
use Friendica\Core\System;
|
||||||
|
@ -617,6 +618,19 @@ class Probe
|
||||||
{
|
{
|
||||||
$parts = parse_url($uri);
|
$parts = parse_url($uri);
|
||||||
|
|
||||||
|
$hookData = [
|
||||||
|
'uri' => $uri,
|
||||||
|
'network' => $network,
|
||||||
|
'uid' => $uid,
|
||||||
|
'result' => [],
|
||||||
|
];
|
||||||
|
|
||||||
|
Hook::callAll('probe_detect', $hookData);
|
||||||
|
|
||||||
|
if ($hookData['result']) {
|
||||||
|
return $hookData['result'];
|
||||||
|
}
|
||||||
|
|
||||||
if (!empty($parts["scheme"]) && !empty($parts["host"])) {
|
if (!empty($parts["scheme"]) && !empty($parts["host"])) {
|
||||||
$host = $parts["host"];
|
$host = $parts["host"];
|
||||||
if (!empty($parts["port"])) {
|
if (!empty($parts["port"])) {
|
||||||
|
@ -1731,39 +1745,6 @@ class Probe
|
||||||
$data['network'] = Protocol::TWITTER;
|
$data['network'] = Protocol::TWITTER;
|
||||||
$data['baseurl'] = 'https://twitter.com';
|
$data['baseurl'] = 'https://twitter.com';
|
||||||
|
|
||||||
$curlResult = Network::curl($data['url'], false);
|
|
||||||
if (!$curlResult->isSuccess()) {
|
|
||||||
return [];
|
|
||||||
}
|
|
||||||
|
|
||||||
$body = $curlResult->getBody();
|
|
||||||
$doc = new DOMDocument();
|
|
||||||
@$doc->loadHTML($body);
|
|
||||||
$xpath = new DOMXPath($doc);
|
|
||||||
|
|
||||||
$list = $xpath->query('//img[@class]');
|
|
||||||
foreach ($list as $node) {
|
|
||||||
$img_attr = [];
|
|
||||||
if ($node->attributes->length) {
|
|
||||||
foreach ($node->attributes as $attribute) {
|
|
||||||
$img_attr[$attribute->name] = $attribute->value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (empty($img_attr['class'])) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (strpos($img_attr['class'], 'ProfileAvatar-image') !== false) {
|
|
||||||
if (!empty($img_attr['src'])) {
|
|
||||||
$data['photo'] = $img_attr['src'];
|
|
||||||
}
|
|
||||||
if (!empty($img_attr['alt'])) {
|
|
||||||
$data['name'] = $img_attr['alt'];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return $data;
|
return $data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue