mirror of
https://github.com/pierre42100/ComunicAPI
synced 2024-11-30 09:16:35 +00:00
74 lines
1.7 KiB
PHP
74 lines
1.7 KiB
PHP
<?php
|
|
/**
|
|
* URL analyzer
|
|
*
|
|
* Retreivee the source code of a webpage to extracts
|
|
* its open graph tags
|
|
*
|
|
* @author Pierre HUBERT
|
|
*/
|
|
|
|
class URLAnalyzer {
|
|
|
|
/**
|
|
* Analyze a given URL to extract OpenGraph content
|
|
*
|
|
* @param string $url The URL to analyze
|
|
* @param int $timeout The
|
|
* @return array Open graph informations in case of success or
|
|
* empty array in case of failure
|
|
*/
|
|
public static function analyze(string $url, int $timeout = 15) : array {
|
|
|
|
//Initialize curl
|
|
$ch = curl_init($url);
|
|
|
|
//Set timeout
|
|
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
|
|
curl_setopt($ch, CURLOPT_TIMEOUT, 5);
|
|
|
|
//Get the response
|
|
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
|
|
|
//Perform the request
|
|
$source = curl_exec($ch);
|
|
if(!$source)
|
|
return array();
|
|
|
|
//Analyze response
|
|
preg_match_all('#<meta (.*?)>#is', $source, $results, PREG_PATTERN_ORDER);
|
|
|
|
//Process results
|
|
$list = array();
|
|
foreach($results[1] as $entry){
|
|
|
|
//Remove spaces
|
|
$entry = str_replace(array(" =", "= "), "=", $entry);
|
|
|
|
//Check if the meta tag represent an interest
|
|
if(preg_match("/property/", $entry) AND preg_match("/og:/", $entry)){
|
|
|
|
//Search for property tag and content tag
|
|
//"
|
|
preg_match("#property=[\"]og:(.*?)[\"]#is", $entry, $matches1);
|
|
preg_match("#content=[\"](.*?)[\"]#is", $entry, $matches2);
|
|
|
|
$name = isset($matches1[1]) ? $matches1[1] : 1;
|
|
$value = isset($matches2[1]) ? $matches2[1] : "";
|
|
|
|
//'
|
|
preg_match("#property=[\']og:(.*?)[\']#is", $entry, $matches1);
|
|
preg_match("#content=[\'](.*?)[\']#is", $entry, $matches2);
|
|
|
|
$name = isset($matches1[1]) ? $matches1[1] : $name;
|
|
$value = isset($matches2[1]) ? $matches2[1] : $value;
|
|
|
|
$list[$name] = $value;
|
|
}
|
|
}
|
|
|
|
|
|
return $list;
|
|
}
|
|
|
|
} |