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;
}
}