3 * Name: Leistungsschutzrecht
4 * Description: Only useful in germany: Remove data from snippets from members of the VG Media
6 * Author: Michael Vogel <https://pirati.ca/profile/heluecht>
9 use Friendica\Core\Config;
11 function leistungsschutzrecht_install() {
12 register_hook('cron', 'addon/leistungsschutzrecht/leistungsschutzrecht.php', 'leistungsschutzrecht_cron');
13 register_hook('getsiteinfo', 'addon/leistungsschutzrecht/leistungsschutzrecht.php', 'leistungsschutzrecht_getsiteinfo');
14 register_hook('page_info_data', 'addon/leistungsschutzrecht/leistungsschutzrecht.php', 'leistungsschutzrecht_getsiteinfo');
18 function leistungsschutzrecht_uninstall() {
19 unregister_hook('cron', 'addon/leistungsschutzrecht/leistungsschutzrecht.php', 'leistungsschutzrecht_cron');
20 unregister_hook('getsiteinfo', 'addon/leistungsschutzrecht/leistungsschutzrecht.php', 'leistungsschutzrecht_getsiteinfo');
21 unregister_hook('page_info_data', 'addon/leistungsschutzrecht/leistungsschutzrecht.php', 'leistungsschutzrecht_getsiteinfo');
24 function leistungsschutzrecht_getsiteinfo($a, &$siteinfo) {
25 if (!isset($siteinfo["url"]))
28 if (!leistungsschutzrecht_is_member_site($siteinfo["url"]))
31 //$siteinfo["title"] = $siteinfo["url"];
32 $siteinfo["text"] = leistungsschutzrecht_cuttext($siteinfo["text"]);
33 unset($siteinfo["image"]);
34 unset($siteinfo["images"]);
35 unset($siteinfo["keywords"]);
38 function leistungsschutzrecht_cuttext($text) {
39 $text = str_replace(["\r", "\n"], [" ", " "], $text);
43 $text = str_replace(" ", " ", $text);
44 } while ($oldtext != $text);
46 $words = explode(" ", $text);
52 foreach ($words as $word) {
58 if (++$count >= $limit) {
59 if (sizeof($words) > $limit)
68 function leistungsschutzrecht_fetchsites() {
69 require_once("include/network.php");
71 // This list works - but question is how current it is
72 $url = "http://leistungsschutzrecht-stoppen.d-64.org/blacklist.txt";
73 $sitelist = fetch_url($url);
74 $siteurls = explode(',', $sitelist);
76 $whitelist = ['tagesschau.de', 'heute.de', 'wdr.de'];
79 foreach ($siteurls AS $site) {
80 if (!in_array($site, $whitelist)) {
81 $sites[$site] = $site;
85 // I would prefer parsing the list from the original site, but I haven't found a list.
86 // The following stays here to possibly reenable it in the future without having to reinvent the wheel completely.
90 $url = "http://www.vg-media.de/lizenzen/digitale-verlegerische-angebote/wahrnehmungsberechtigte-digitale-verlegerische-angebote.html";
92 $site = fetch_url($url);
94 $doc = new DOMDocument();
95 @$doc->loadHTML($site);
97 $xpath = new DomXPath($doc);
98 $list = $xpath->query("//td/a");
99 foreach ($list as $node) {
101 if ($node->attributes->length)
102 foreach ($node->attributes as $attribute)
103 $attr[$attribute->name] = $attribute->value;
105 if (isset($attr["href"])) {
106 $urldata = parse_url($attr["href"]);
108 if (isset($urldata["host"]) && !isset($urldata["path"])) {
109 $cleanedurlpart = explode("%", $urldata["host"]);
111 $hostname = explode(".", $cleanedurlpart[0]);
112 $site = $hostname[sizeof($hostname) - 2].".".$hostname[sizeof($hostname) - 1];
113 $sites[$site] = $site;
119 if (sizeof($sites)) {
120 Config::set('leistungsschutzrecht','sites',$sites);
124 function leistungsschutzrecht_is_member_site($url) {
125 $sites = Config::get('leistungsschutzrecht','sites');
130 if (sizeof($sites) == 0)
133 $urldata = parse_url($url);
135 if (!isset($urldata["host"]))
138 $cleanedurlpart = explode("%", $urldata["host"]);
140 $hostname = explode(".", $cleanedurlpart[0]);
141 $site = $hostname[sizeof($hostname) - 2].".".$hostname[sizeof($hostname) - 1];
143 return (isset($sites[$site]));
146 function leistungsschutzrecht_cron($a,$b) {
147 $last = Config::get('leistungsschutzrecht','last_poll');
150 $next = $last + 86400;
152 logger('poll intervall not reached');
156 leistungsschutzrecht_fetchsites();
157 Config::set('leistungsschutzrecht','last_poll', time());