• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

[GELÖST] Problem mit RSS-API

AlcuZan

New member
HTML File:
HTML:
<html>
  <head>
	<script src="https://code.jquery.com/jquery-1.11.3.js"   integrity="sha256-IGWuzKD7mwVnNY01LtXxq3L84Tm/RJtNCYBfXZw3Je0="   crossorigin="anonymous"></script>
	<script src="lib/feed.js"></script>
<style>
#feed {font-size:13px; font-family:Arial; line-height:18px; margin:0; padding:0;}
#feed {color:#000; text-decoration:none;}
#feed a {color:#BE1E3C; text-align: right;}
</style>
  </head>
  <body>
    <div id="feed"></div><br>
	<script type="text/javascript" src= "script_rssapi.js"> 
	</script> 
  </body>
</html>

script_rssapi.js Code:
HTML:
var objRss = new rss();
		var feedURL = "https://www.tu-braunschweig.de/marketing/aktuellesundtermine/aktuell/rssfeed.xml";
		var count = 7;
		objRss.displayAsinc(feedURL, "feed", 'pubDate','date','desc',count, 512);
Bekomme folgende Fehlermeldung:
Code:
Uncaught SyntaxError: Unexpected end of JSON input
    at JSON.parse (<anonymous>)
    at setItems (feed.js:161)
    at Object.success (feed.js:244)
    at fire (jquery-1.11.3.js:3148)
    at Object.fireWith [as resolveWith] (jquery-1.11.3.js:3260)
    at done (jquery-1.11.3.js:9314)
    at XMLHttpRequest.callback (jquery-1.11.3.js:9718)

Wo liegt der Fehler?
 
Zuletzt bearbeitet von einem Moderator:
Warum wird da überhaupt was mit JSON gemacht? RSS ist XML...

Aber um das Problem weite rzu analysieren solltest du dir in der feed.js die Zeile 161 und 244 mal ansehen - am bestem im Debugger mit den Werten die dort landen.

PS:
Heißt das Teil wirklich so? Synchron schreibt man eingentlich mit "y"...
 
Derjenige der die API geschrieben hat - welche übrigens die alte Google Feed API ablösen soll - hat es eben so konzipiert, dass es in JSON umgewandelt wird. Schaut euch hier mal die feed.js im Ordner lib an. Finde ich aber auch gar nicht verkehrt, da ich gerne mit JSON arbeite.
Ja, die Methode heißt wirklich displayAsinc und die wird ja auch aufgerufen.

Habe übrigens noch ein weiteres Problem, vielleicht könnt ihr mir da auch weiterhelfen. Und zwar habe ich derzeit den Newsfeed auf der Homepage über einen Online-Converter implementiert. Von der Lösung will ich aber weg, weil man als Nicht-Premium Nutzer nicht alle Features nutzen kann, was Mist ist. Das Problem ist jetzt, dass man die Links im Feed nicht mit der linken Maustaste anklicken kann - tut man dies, verschwindet der Feed und weiter passiert nichts, außer dass man in der Konsole folgende Fehlermeldung bekommt:
Code:
Mixed Content: The page at 'https://www.tu-braunschweig.de/marketing' was loaded over HTTPS, but requested an insecure resource 'http://www.tu-braunschweig.de/marketing/aktuellesundtermine/aktuell'. This request has been blocked; the content must be served over HTTPS.

Das Verrückte ist, dass man die Links mit der mittleren Maustaste anklicken kann und es passiert genau das was passieren soll - der Link wird in einem neuen Tab korrekt geöffnet. Ich nehme an, dass da die Methoden, die dafür sorgen dass etwas passiert wenn man auf einen Link klickt, irgendwie falsch programmiert sind, kann mich aber auch irren? Kann ich das irgendwie beheben? Das Problem ist, dass wir mit einem CMS arbeiten und ich somit an manchen Code gar nicht herankomme...
 
Zuletzt bearbeitet:
Warum machst du für das gleiche Problem einen neuen Thread auf?
Warum gehts du über die RSS-API -> feed.js mittels displayAsinc wenn du dir aus anderer Quelle dan XML-feed als JSON-feed holst?

HTML:
<!DOCTYPE html>
<html lang="de">
<head>
    <title>rss2json</title>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <style>
    </style>
    <script>
    // Service: https://api.rss2json.com
    // API: https://api.rss2json.com/v1/api.json?rss_url=[encodeURIComponent(uri)]
    // Trst uri 1: https://www.theguardian.com/international/rss
    // Trst uri 2: https://www.tu-braunschweig.de/marketing/aktuellesundtermine/aktuell/rssfeed.xml
    function getJSON(url, callback) {
        var xhr = new XMLHttpRequest();

        xhr.open('GET', url, true);
        xhr.responseType = 'json';
        xhr.addEventListener('load', function (event) {
            if (xhr.status >= 200 && xhr.status < 300) {
                if (xhr.response && xhr.response.status) {
                    switch (xhr.response.status) {
                    case 'error':
                        callback('', xhr.response.status, xhr.response.message ? xhr.response.message : 'failed to get feed');
                        break;
                    case 'ok':
                        callback(xhr.response, xhr.response.status, xhr.response.message ? xhr.response.message : 'feed loaded');
                        break;
                    }
                }
            } else {
                callback('', xhr.statusText, 'connection error');
            }
        });
        xhr.send();
    }

    function getRssFeed() {
        var uriApi = 'https://api.rss2json.com/v1/api.json?rss_url=',
            uriFeed = 'https://www.tu-braunschweig.de/marketing/aktuellesundtermine/aktuell/rssfeed.xml';

        console.log(uriApi + encodeURIComponent(uriFeed));
        getJSON(uriApi + encodeURIComponent(uriFeed), function (data, status, message) {
            var i,
                html = '';

            if (data && data.items) {
                html += '<ul>';
                for (i = 0; i < data.items.length; i = i + 1) {
                    html += '<li>' + data.items[i].pubDate +
                        ' - <a href="' + data.items[i].link + '" target="_blank">' +
                        data.items[i].title + '</a></li>';
                }
                html += '</ul>';
            }

            document.getElementById('feed').innerHTML = html;
        });
    }

    window.onload = getRssFeed;
    </script>
</head>

<body>
    <div id="feed"></div>
</body>
</html>
 
Zwei unterschiedliche Ansätze - zwei unterschiedliche Threads. Wie ich sagte will ich von rss2json weg - da es Einträge anzeigt die es nicht mehr gibt! - und lieber RSS-API benutzen.
In meinem Fall speziell generiert der Konverter den Eintrag "Entfernung von Skripten aus Stud.IP mit - und diesen gibt es nicht mehr, da ich ihn gelöscht habe! Das könnte möglicherweise daran liegen, dass ich keinen Premium Account hab. Aus diesem Grund will ich lieber eine andere API benutzen.
 
Zuletzt bearbeitet:
Und was ist nun genau das Problem? Kommt der Fehler Uncaught SyntaxError: Unexpected end of JSON input ständig oder zeitweise? Der Fehler besagt doch nur das du einen fehlerhaften JSON-String von dem Server (in deinem Fall die RSSget.php auf deinem Server) bekommst und daher das JavaScript einen Fehler wirft.

Und das mit der rechten Maustaste auf Link kling auch sehr dubios.

Ich konnte bei einem kleinen Test keine deiner Probleme nicht nachvollziehen. Weder mit RSS-API noch mit rss2json.
 
Der SyntaxError kommt mittlerweile gar nicht mehr, da war ein Fehler in meinem Config File.
Dafür bekomme ich nun aber einen Internal Server Error:
Code:
Sorry, there was a problem!
feed.js:297 Internal Server Error
feed.js:298 error
feed.js:299
Das Log File spuckt Folgendes aus:
Code:
PHP Fatal error: Uncaught exception 'Exception' with message 'DateTime::__construct(): It is not safe to rely on the system's timezone settings. You are required to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'Europe/Berlin' for 'CET/1.0/no DST' instead' in /var/www/html/marketing/test/service/RSSget.php:38\nStack trace:\n#0 /var/www/html/marketing/test/service/RSSget.php(38): DateTime->__construct('Fri, 20 Jan 201...')\n#1 {main}\n thrown in /var/www/html/marketing/test/service/RSSget.php on line 38, referer: https://marketing.rz.tu-bs.de/marketing/test/feed.html
Also scheint das Problem nicht bei mir sondern im Code von RSS-API zu liegen.
 
Keine Ahnung was du da treibst, aber "NetworkError: 500 Internal Server Error - https://marketing.rz.tu-bs.de/marketing/test/service/RSSget.php" sagt deutlich aus, das auf deinem Server was nicht ordungsgemäß läuft
 
"keine Ahnung was du treibst"? Sag mal musst du unverschämt werden? Dass da was nicht ordnungsgemäß läuft ist mir klar, nur was? Und woher soll ich das wissen wenn es nicht mein eigener Server ist sondern der des Instituts für das ich arbeite?
Übrigens hat auf github noch jemand anderes das Problem. Der "treibt" anscheinend auch irgendwas.
Edit: hab das Problem selbst gelöst. In getRSS.php hat eine Zeile gefehlt. Trotzdem danke für die "Hilfe".
 
Zuletzt bearbeitet:
"keine Ahnung was du treibst"? Sag mal musst du unverschämt werden?
Das sollte keine Beleidigung sein, sondern nur eine saloppe Aussage.

Hat die RSSget.php denn auch alle schreibrechte um die Cache Dateien zu schreiben. Gibt es evtl. sonstige Rechteprobleme seitens php oder apache etc., das kann auch einen generellen 500er Fehler werfen


@Mikdoe: Das müsste die Datei sein die den Fehler wirft:
PHP:
<?php
/*
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
*/
include "config.php";
include "feedIndex.php";

$http_referer = $_SERVER['HTTP_REFERER'];
$isOriginValid = false;
$allowOriginDomain = "";	

foreach($ALLOWED_DOMAINS as $domain){	
	if(strrpos($http_referer,$domain) !== false){
		$isOriginValid = true;
		$allowOriginDomain = $domain;
	}
}

// uncomment this line if don't want to maintain a white list. This is not recommended
//$isOriginValid = true;

if(isset($_POST['feedUrl']) and $isOriginValid){	
	if($_POST['feedUrl'] != ''){
		
		$cache = new feedIndex();
		$cache->load();
		$result = $cache->search($_POST['feedUrl']);
		$channelTitle = "";
		$channelUrl = "";
		$channelDescription = "";
		
		if(count($result) > 0){
			$update = false;
			
			// check if it was updated in the last 24 hours
			$lastUpdated = new DateTime($result[0]['lastUpdated']);
			$lastUpdated->format('Y-m-d H:i:s');
			$now = new DateTime();
			$now->format('Y-m-d H:i:s');
			
			
			$interval = $lastUpdated->diff($now);
			
			if ( $interval->days > 0){
				$update = true;
			}
			
			//if the limit,  sort field or method has chane also update the file
			if(isset($_POST['sortField']) and $_POST['sortField'] != '' and $_POST['sortField'] != $result[0]['sort']['field']){
				$update = true;
			}
			
			if(isset($_POST['sortOrder']) and $_POST['sortOrder'] != '' and $_POST['sortOrder'] != $result[0]['sort']['order']){
				$update = true;

			}
			
			if(isset($_POST['sortType']) and $_POST['sortType'] != '' and $_POST['sortType'] != $result[0]['sort']['type']){
				$update = true;

			}
			
			if(isset($_POST['limit']) and $_POST['limit'] != '' and $_POST['limit'] != $result[0]['limit']){
				$update = true;
			}
					
			
			if ($update){
				$cache->getFeed($_POST['feedUrl'],$_POST['sortField'],$_POST['sortOrder'],$_POST['sortType'],$_POST['limit']);
				$cache->updateIndex($result[0]['id'],$_POST['feedUrl'],$_POST['sortField'],$_POST['sortOrder'],$_POST['sortType'],$_POST['limit']);
			}
			
			
			$feed = $BASE_FEED_URL.$result[0]['id'];
			$id = $result[0]['id'];	
				
			
		}else{
			
			$result2 = $cache->add($_POST['feedUrl'],$_POST['sortField'],$_POST['sortOrder'],$_POST['sortType'],$_POST['limit']);
			if($result2 != false){
				$cache->save();
				$feed = $BASE_FEED_URL.$result2['id'];		
				$id = $result2['id'];
			}else{
				$id = false;
			}
		}
		
		header("Access-Control-Allow-Origin: $allowOriginDomain");
	// uncomment this line (and comment out the one above) if don't want to maintain a white list. This is not recommended
	//	header("Access-Control-Allow-Origin: *");
		
		
		if($id != false){
			$objRss = new RSS($channelTitle,$channelUrl,$channelDescription,"en-us",'./');
			$objRss->parse($feed,false);
			echo $objRss->getJSON();
			$now = new DateTime();
			$log = $now->format("Y-m-d H:i:s")."|".$id.PHP_EOL;
			$name = "../cache/logs/requests/".$now->format("Y-m-d").".log";
			$fw = fopen($name,'a');
			fputs($fw,$log,strlen($log));
			fclose($fw);
			
		}else{
			echo("{}");
			$now = new DateTime();
			$log = $now->format("Y-m-d H:i:s")."| (ERROR) can't accees feed: ".$_POST['feedUrl'].PHP_EOL;
			$name = "../cache/logs/requests/".$now->format("Y-m-d").".log";
			$fw = fopen($name,'a');
			fputs($fw,$log,strlen($log));
			fclose($fw);
		}
	
	}//if($_GET['url'] != ''){
}// if(isset($_GET['url'])){


?>
 
Okay, dann entschuldige, habe das falsch aufgefasst. Wie bereits erwähnt konnte ich das Problem selbst lösen, indem ich in getRSS.php eine Zeile hinzugefügt habe:
Code:
 date_default_timezone_set ('Europe/Berlin')
.
Ich hatte den Error log ausgelesen, in dem stand dass eine Zeitzone festgelegt werden muss. Das hab ich dann gemacht und zack, Internal Server Error war Geschichte.
 
Zurück
Oben