]> git.mxchange.org Git - friendica.git/blobdiff - mod/parse_url.php
fix json_encode on url's
[friendica.git] / mod / parse_url.php
index 33381a0d271be0363535bf2a6e29aa5ad892ccc6..ef9f8a9f41b537644ea0464e01d0d276be1d61ae 100644 (file)
@@ -2,31 +2,95 @@
 
 require_once('library/HTML5/Parser.php');
 
+
 function parse_url_content(&$a) {
-       $url = trim($_GET['url']);
 
-       $template = "<a href=\"%s\" >%s</a>";
+       logger('parse_url: ' . $_GET['url']);
+
+       $url = trim(hex2bin($_GET['url']));
+
+       logger('parse_url: ' . $url);
+
+       $text = null;
+
+       $template = "<a href=\"%s\" >%s</a>\n%s";
+
+
+       $arr = array('url' => $url, 'text' => '');
+
+       call_hooks('parse_link', $arr);
+
+       if(strlen($arr['text'])) {
+               echo $arr['text'];
+               killme();
+       }
 
        if($url) 
                $s = fetch_url($url);
-       
+       else {
+               echo '';
+               killme();
+       }
+
+
        if(! $s) {
-               echo sprintf($template,$url,$url);
+               echo sprintf($template,$url,$url,'');
                killme();
        }
 
-       $dom = HTML5_Parser::parse($s);
+       $dom = @HTML5_Parser::parse($s);
 
        if(! $dom)
                return $ret;
 
        $items = $dom->getElementsByTagName('title');
-       
-       foreach($items as $item) {
-               $title = $item->textContent;
-               break;
+
+       if($items) {
+               foreach($items as $item) {
+                       $title = trim($item->textContent);
+                       break;
+               }
+       }
+
+
+       $divs = $dom->getElementsByTagName('div');
+       if($divs) {
+               foreach($divs as $div) {
+                       $class = $div->getAttribute('class');
+                       if($class && stristr($class,'article')) {
+                               $items = $div->getElementsByTagName('p');
+                               if($items) {
+                                       foreach($items as $item) {
+                                               $text = $item->textContent;
+                                               $text = strip_tags($text);
+                                               if(strlen($text) < 100)
+                                                       continue;
+                                               $text = substr($text,0,250) . '...' ;
+                                               break;
+                                       }
+                               }
+                       }
+               }
+       }
+
+       if(! $text) {
+               $items = $dom->getElementsByTagName('p');
+               if($items) {
+                       foreach($items as $item) {
+                               $text = $item->textContent;
+                               $text = strip_tags($text);
+                               if(strlen($text) < 100)
+                                       continue;
+                               $text = substr($text,0,250) . '...' ;
+                               break;
+                       }
+               }
+       }
+
+       if(strlen($text)) {
+               $text = '<br />' . $text;
        }
 
-       echo sprintf($template,$url,$title);
+       echo sprintf($template,$url,$title,$text);
        killme();
 }
\ No newline at end of file