summaryrefslogtreecommitdiff
path: root/classes/article.php
diff options
context:
space:
mode:
authorAndrew Dolgov <[email protected]>2019-08-14 16:55:38 +0300
committerAndrew Dolgov <[email protected]>2019-08-14 16:55:38 +0300
commit68e2b05f657dca2a389cb9d585215c126e5da290 (patch)
tree50bc7e4ae3661b08cadec7bdf0b29100dc355dd0 /classes/article.php
parent26dbe02968f543913f67c3d6966ae5fe454d2ab1 (diff)
* move get_article_image to Article; implement better og:image detection (similar to android app)
* pass article image to API clients in headlines row object
Diffstat (limited to 'classes/article.php')
-rwxr-xr-xclasses/article.php40
1 files changed, 40 insertions, 0 deletions
diff --git a/classes/article.php b/classes/article.php
index 67b1a4a05..f22c28066 100755
--- a/classes/article.php
+++ b/classes/article.php
@@ -823,4 +823,44 @@ class Article extends Handler_Protected {
return true;
}
+ static function get_article_image($enclosures, $content, $site_url) {
+
+ $article_image = false;
+ $tmpdoc = new DOMDocument();
+
+ if (@$tmpdoc->loadHTML('<?xml encoding="UTF-8">' . mb_substr($content, 0, 131070))) {
+ $tmpxpath = new DOMXPath($tmpdoc);
+ $elems = $tmpxpath->query('(//img[@src]|//video[@poster]|//iframe[contains(@src , "youtube.com/embed/")])');
+
+ foreach ($elems as $e) {
+ if ($e->nodeName == "iframe") {
+ $matches = [];
+ if ($rrr = preg_match("/\/embed\/([\w-]+)/", $e->getAttribute("src"), $matches)) {
+ $article_image = "https://img.youtube.com/vi/" . $matches[1] . "/hqdefault.jpg";
+ break;
+ }
+ } else if ($e->nodeName == "video") {
+ $article_image = $e->getAttribute("poster");
+ break;
+ } else if ($e->nodeName == 'img') {
+ if (mb_strpos($e->getAttribute("src"), "data:") !== 0) {
+ $article_image = $e->getAttribute("src");
+ }
+ break;
+ }
+ }
+ }
+
+ if ($article_image)
+ return rewrite_relative_url($site_url, $article_image);
+
+ foreach ($enclosures as $enc) {
+ if (strpos($enc["content_type"], "image/") !== FALSE) {
+ return rewrite_relative_url($site_url, $enc["content_url"]);
+ }
+ }
+
+ return false;
+ }
+
}