]> git.wh0rd.org - tt-rss.git/blob - plugins/af_redditimgur/init.php
af_redditimgur: do not process content multiple times
[tt-rss.git] / plugins / af_redditimgur / init.php
1 <?php
2 class Af_RedditImgur extends Plugin {
3
4 private $link;
5 private $host;
6
7 function about() {
8 return array(1.0,
9 "Inline image links in Reddit RSS feeds",
10 "fox");
11 }
12
13 function init($host) {
14 $this->link = $host->get_link();
15 $this->host = $host;
16
17 $host->add_hook($host::HOOK_ARTICLE_FILTER, $this);
18 }
19
20 function hook_article_filter($article) {
21 $owner_uid = $article["owner_uid"];
22
23 if (strpos($article["link"], "reddit.com/r/") !== FALSE) {
24 if (strpos($article["plugin_data"], "redditimgur,$owner_uid:") === FALSE) {
25 $doc = new DOMDocument();
26 @$doc->loadHTML($article["content"]);
27
28 if ($doc) {
29 $xpath = new DOMXPath($doc);
30 $entries = $xpath->query('(//a[@href]|//img[@src])');
31
32 foreach ($entries as $entry) {
33 if ($entry->hasAttribute("href")) {
34 if (preg_match("/\.(jpg|jpeg|gif|png)$/i", $entry->getAttribute("href"))) {
35
36 $img = $doc->createElement('img');
37 $img->setAttribute("src", $entry->getAttribute("href"));
38
39 $entry->parentNode->replaceChild($img, $entry);
40 }
41 }
42
43 // remove tiny thumbnails
44 if ($entry->hasAttribute("src")) {
45 if ($entry->parentNode && $entry->parentNode->parentNode) {
46 $entry->parentNode->parentNode->removeChild($entry->parentNode);
47 }
48 }
49 }
50
51 $node = $doc->getElementsByTagName('body')->item(0);
52
53 if ($node) {
54 $article["content"] = $doc->saveXML($node, LIBXML_NOEMPTYTAG);
55 $article["plugin_data"] = "redditimgur,$owner_uid:" . $article["plugin_data"];
56 }
57 }
58 }
59 } else if (isset($article["stored"]["content"])) {
60 $article["content"] = $article["stored"]["content"];
61 }
62
63 return $article;
64 }
65 }
66 ?>