Bei der Einbindung von mehreren Feeds der gleichen Ursprungsseite kann es vorkommen, dass Nachrichten doppelte aufgelistet werden.
Über die Nextcloud-App "News" lassen sich solche Duplikate (bisher zumindest) nicht löschen. (Möglicherweise ist das aber auch Absicht.)
Das folgende PHP-Skript markiert alle Duplikate automatisch als gelesen und reduziert damit die dargestellten Einträge in der News-App. Das Skript kann per Cronjob aufgerufen werden.
define("NEXTCLOUD_URL", "https://NEXTCLOUD/index.php/apps/news/api/v1-3/"); define("NEXTCLOUD_USER", "USER"); define("NEXTCLOUD_PASS", "PASS"); if($j = nextCloudApiNewsDuplicates("items?type=3&getRead=false&batchSize=-1&oldestFirst=true")) { $titles = $toDelete = array(); foreach($j->items as $i) { if(isset($titles[$i->title])) { $toDelete[] = $i->id; } $titles[$i->title][] = $i->id; } } else { die(0); } if(is_array($toDelete) && count($toDelete)>0) { $d = array("itemIds"=>$toDelete); $foo = nextCloudApiNewsDuplicates("/items/read/multiple", "POST", $d, FALSE); } function nextCloudApiNewsDuplicates($url, $method="GET", $data=FALSE, $return="json") { $username = NEXTCLOUD_USER; $password = NEXTCLOUD_PASS; $URL = NEXTCLOUD_URL; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $URL.$url); switch($method) { default: case "GET": break; case "POST": curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data)); print_r($data); break; case "PUT": curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT"); break; } curl_setopt($ch, CURLOPT_TIMEOUT, 30); curl_setopt($ch, CURLOPT_HTTPHEADER, ["Authorization: Basic ".base64_encode($username.":".$password), "OCS-APIRequest: true"]); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $result=curl_exec ($ch); $status_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close ($ch); if($return=="json") { if($result && !is_null($j=json_decode($result))) { return $j; } else { return FALSE; } } else { return $result; } }