-/* Converts a linkdate time (YYYYMMDD_HHMMSS) of an article to a timestamp (Unix epoch)
- (used to build the ADD_DATE attribute in Netscape-bookmarks file)
- PS: I could have used strptime(), but it does not exist on Windows. I'm too kind. */
-function linkdate2timestamp($linkdate)
-{
- if(strcmp($linkdate, '_000000') !== 0 || !$linkdate){
- $Y=$M=$D=$h=$m=$s=0;
- $r = sscanf($linkdate,'%4d%2d%2d_%2d%2d%2d',$Y,$M,$D,$h,$m,$s);
- return mktime($h,$m,$s,$M,$D,$Y);
- }
- return time();
-}
-
-/* Converts a linkdate time (YYYYMMDD_HHMMSS) of an article to a RFC822 date.
- (used to build the pubDate attribute in RSS feed.) */
-function linkdate2rfc822($linkdate)
-{
- return date('r',linkdate2timestamp($linkdate)); // 'r' is for RFC822 date format.
-}
-
-/* Converts a linkdate time (YYYYMMDD_HHMMSS) of an article to a ISO 8601 date.
- (used to build the updated tags in ATOM feed.) */
-function linkdate2iso8601($linkdate)
-{
- return date('c',linkdate2timestamp($linkdate)); // 'c' is for ISO 8601 date format.
-}
-
-// Parse HTTP response headers and return an associative array.
-function http_parse_headers_shaarli( $headers )
-{
- $res=array();
- foreach($headers as $header)
- {
- $i = strpos($header,': ');
- if ($i!==false)
- {
- $key=substr($header,0,$i);
- $value=substr($header,$i+2,strlen($header)-$i-2);
- $res[$key]=$value;
- }
- }
- return $res;
-}
-
-/* GET an URL.
- Input: $url : URL to get (http://...)
- $timeout : Network timeout (will wait this many seconds for an anwser before giving up).
- Output: An array. [0] = HTTP status message (e.g. "HTTP/1.1 200 OK") or error message
- [1] = associative array containing HTTP response headers (e.g. echo getHTTP($url)[1]['Content-Type'])
- [2] = data
- Example: list($httpstatus,$headers,$data) = getHTTP('http://sebauvage.net/');
- if (strpos($httpstatus,'200 OK')!==false)
- echo 'Data type: '.htmlspecialchars($headers['Content-Type']);
- else
- echo 'There was an error: '.htmlspecialchars($httpstatus)
-*/
-function getHTTP($url,$timeout=30)
-{
- try
- {
- $options = array('http'=>array('method'=>'GET','timeout' => $timeout, 'user_agent' => 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:23.0) Gecko/20100101 Firefox/23.0')); // Force network timeout
- $context = stream_context_create($options);
- $data=file_get_contents($url,false,$context,-1, 4000000); // We download at most 4 Mb from source.
- if (!$data) { return array('HTTP Error',array(),''); }
- $httpStatus=$http_response_header[0]; // e.g. "HTTP/1.1 200 OK"
- $responseHeaders=http_parse_headers_shaarli($http_response_header);
- return array($httpStatus,$responseHeaders,$data);
- }
- catch (Exception $e) // getHTTP *can* fail silently (we don't care if the title cannot be fetched)
- {
- return array($e->getMessage(),'','');
- }
-}
-
-// Extract title from an HTML document.
-// (Returns an empty string if not found.)
-function html_extract_title($html)
-{
- return preg_match('!<title>(.*?)</title>!is', $html, $matches) ? trim(str_replace("\n",' ', $matches[1])) : '' ;
-}
-