]> git.mxchange.org Git - friendica.git/commitdiff
API: Better support of picture links
authorMichael Vogel <icarus@dabo.de>
Sat, 22 Feb 2014 14:42:34 +0000 (15:42 +0100)
committerMichael Vogel <icarus@dabo.de>
Sat, 22 Feb 2014 14:42:34 +0000 (15:42 +0100)
include/api.php
include/bbcode.php

index b9187ca3aa70ad79cf0d055abb807670eaef55e0..d98ad970d59532a51a304fe6c63251758126a697 100644 (file)
                if ($include_entities != "true")
                        return array();
 
+               $bbcode = bb_CleanPictureLinks($bbcode);
+
                // Change pure links in text to bbcode uris
                $bbcode = preg_replace("/([^\]\='".'"'."]|^)(https?\:\/\/[a-zA-Z0-9\:\/\-\?\&\;\.\=\_\~\#\%\$\!\+\,]+)/ism", '$1[url=$2]$2[/url]', $bbcode);
 
@@ -2392,6 +2394,8 @@ function api_get_nick($profile) {
 function api_clean_plain_items($Text) {
        $include_entities = strtolower(x($_REQUEST,'include_entities')?$_REQUEST['include_entities']:"false");
 
+       $Text = bb_CleanPictureLinks($Text);
+
        if ($include_entities == "true") {
                $URLSearchString = "^\[\]";
 
index 186caad7bc8f1bb774063bd52ab974e341893e0d..96ca39462d6237c3c2e10608322740fed5fff0fb 100644 (file)
@@ -533,8 +533,8 @@ function GetProfileUsername($profile, $username) {
        return($username);
 }
 
-function RemovePictureLinks($match) {
-       $ch = @curl_init($match[2]);
+function bb_RemovePictureLinks($match) {
+       $ch = @curl_init($match[1]);
        @curl_setopt($ch, CURLOPT_NOBODY, true);
        @curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        @curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (compatible; Friendica)");
@@ -542,13 +542,76 @@ function RemovePictureLinks($match) {
        $curl_info = @curl_getinfo($ch);
 
        if (substr($curl_info["content_type"], 0, 6) == "image/")
-               $text = "[url=".$match[2]."]".$match[2]."[/url]";
-       else
                $text = "[url=".$match[1]."]".$match[1]."[/url]";
+       else {
+               $text = "[url=".$match[2]."]".$match[2]."[/url]";
+
+               // if its not a picture then look if its a page that contains a picture link
+               require_once("include/network.php");
+
+               $body = fetch_url($match[1]);
+
+               $doc = new DOMDocument();
+               @$doc->loadHTML($body);
+               $xpath = new DomXPath($doc);
+               $list = $xpath->query("//meta[@name]");
+               foreach ($list as $node) {
+                       $attr = array();
+
+                       if ($node->attributes->length)
+                               foreach ($node->attributes as $attribute)
+                                       $attr[$attribute->name] = $attribute->value;
+
+                       if (strtolower($attr["name"]) == "twitter:image")
+                               $text = "[url=".$attr["content"]."]".$attr["content"]."[/url]";
+               }
+       }
+
+       return($text);
+}
+
+function bb_CleanPictureLinksSub($match) {
+       $ch = @curl_init($match[1]);
+       @curl_setopt($ch, CURLOPT_NOBODY, true);
+       @curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
+       @curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (compatible; Friendica)");
+       @curl_exec($ch);
+       $curl_info = @curl_getinfo($ch);
+
+       // if its a link to a picture then embed this picture
+       if (substr($curl_info["content_type"], 0, 6) == "image/")
+               $text = "[img]".$match[1]."[/img]";
+       else {
+               $text = "[img]".$match[2]."[/img]";
+
+               // if its not a picture then look if its a page that contains a picture link
+               require_once("include/network.php");
+
+               $body = fetch_url($match[1]);
+
+               $doc = new DOMDocument();
+               @$doc->loadHTML($body);
+               $xpath = new DomXPath($doc);
+               $list = $xpath->query("//meta[@name]");
+               foreach ($list as $node) {
+                       $attr = array();
+
+                       if ($node->attributes->length)
+                               foreach ($node->attributes as $attribute)
+                                       $attr[$attribute->name] = $attribute->value;
+
+                       if (strtolower($attr["name"]) == "twitter:image")
+                               $text = "[img]".$attr["content"]."[/img]";
+               }
+       }
 
        return($text);
 }
 
+function bb_CleanPictureLinks($text) {
+       $text = preg_replace_callback("&\[url=([^\[\]]*)\]\[img\](.*)\[\/img\]\[\/url\]&Usi", 'bb_CleanPictureLinksSub', $text);
+       return ($text);
+}
 
        // BBcode 2 HTML was written by WAY2WEB.net
        // extended to work with Mistpark/Friendica - Mike Macgirvin
@@ -635,6 +698,10 @@ function bbcode($Text,$preserve_nl = false, $tryoembed = true, $simplehtml = fal
        // Set up the parameters for a MAIL search string
        $MAILSearchString = $URLSearchString;
 
+       // Bookmarks in red - will be converted to bookmarks in friendica
+       $Text = preg_replace("/#\^\[url\]([$URLSearchString]*)\[\/url\]/ism", '[bookmark=$1]$1[/bookmark]', $Text);
+       $Text = preg_replace("/#\^\[url\=([$URLSearchString]*)\](.*?)\[\/url\]/ism", '[bookmark=$1]$2[/bookmark]', $Text);
+
        if ($simplehtml == 5)
                $Text = preg_replace("/[^#@]\[url\=([$URLSearchString]*)\](.*?)\[\/url\]/ism", '[url]$1[/url]', $Text);
 
@@ -652,7 +719,7 @@ function bbcode($Text,$preserve_nl = false, $tryoembed = true, $simplehtml = fal
                $Text = preg_replace("/([^\]\='".'"'."]|^)(https?\:\/\/[a-zA-Z0-9\:\/\-\?\&\;\.\=\_\~\#\%\$\!\+\,]+)/ism", '$1<a href="$2" target="_blank">$2</a>', $Text);
        else {
                $Text = preg_replace("(\[url\]([$URLSearchString]*)\[\/url\])ism"," $1 ",$Text);
-               $Text = preg_replace_callback("&\[url=([^\[\]]*)\]\[img\](.*)\[\/img\]\[\/url\]&Usi", 'RemovePictureLinks', $Text);
+               $Text = preg_replace_callback("&\[url=([^\[\]]*)\]\[img\](.*)\[\/img\]\[\/url\]&Usi", 'bb_RemovePictureLinks', $Text);
        }
 
        if ($tryoembed)