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

Twitter-Timeline PHP Code nicht valide

anna55

Moderator
Ich habe einen PHP Code, um meine Twitter-Timeline auszulesen, der auch gut läuft, nur leider nicht valide ist mit Doctype XHTML:
PHP:
<?php
//Twitter Feed
//© St.Ray Zilka

$username = 'twitter_name';
$postlimit = '1';

$url = 'http://search.twitter.com/search.atom?q=from:'.$username.'&rpp='.$postlimit.'';
$url = implode("",file($url));

function twitter_parse($url,$i)
{
  preg_match_all('/<content type="html">(.*)<\/content>/U', $url, $posts);
  return $posts[$i];
}

function html($txt)
{
  $html = str_replace('<','<',$txt);
  $html = str_replace('>','>',$html);
  $html = str_replace('"','"',$html);
  $html = str_replace('<a ','<a target="_blank" ',$html);
 
  return $html;
}

foreach(twitter_parse($url,0) as $out)
{
  print html($out).'<br />';
}
?>

Wenn ich nun den Code hier verändere
PHP:
function twitter_parse($url,$i)
{
  preg_match_all('/<?xml version="1.0"?><content type="html">(.*)<\/content>/U', $url, $posts);
  return $posts[$i];
}

ist die Site valide, der Twitter Post wird aber nicht mehr angezeigt.

Gibt es da einen Lösungsweg?
 
1. Ich verstehe nicht, wie die Seite valide werden kann, wenn du eine RegExp änderst.
2. In der RegExp solltest du die Fragezeichen maskieren.
3. Ist das der komplette Code der Seite?
4. Den PHP-Code kann man noch stark verbessern:
a) file sollte man nicht mit URLs verwenden (ist auf vielen Servern verboten) - und warum verwendest du file, wenn du das Array dann mit implode wieder zusammenbaust? -> cURL (oder für die Harten: socket)
b) die Funktion twitter_parse finde ich persönlich überflüssig.
c) in der Funktion html kann man die Ersetzungen alle auf einmal machen (zwei Arrays als Parameter) - ABER in PHP gibt es schon die native Funktion html_entity_decode()... dann muss man nur noch das mit dem <a> machen.
d) für was das foreach? Dadurch wird der Inhalt nur doppelt ausgegeben...
 
Danke für dein Drüberschauen, kkapsner,

der Code ist nicht von mir, steht auch am Anfang drin, wer ihn geschrieben hat. Ich kann kein PHP und weiß auch nicht, wie ich die Seite bei den Vorgaben valide bekomme. Zum schnellen Nachvollziehen, mal mein Grundgerüst mit dem PHP-Code und im zweiten Teil dann die HTML-Ausgabe, die der Validator (http://validator.w3.org/#validate-by-input) anmeckert.
PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Twitterfeed</title> 
</head> 

<body>  

		<h4>Zuletzt getwittert</h4>
	<p>
<?php
//Twitter Feed
//© St.Ray Zilka

$username = 'taunusstein';
$postlimit = '1';

$url = 'http://search.twitter.com/search.atom?q=from:'.$username.'&rpp='.$postlimit.'';
$url = implode("",file($url));

function twitter_parse($url,$i)
{
  preg_match_all('/<content type="html">(.*)<\/content>/U', $url, $posts);
  return $posts[$i];
}

function html($txt)
{
  $html = str_replace('<','<',$txt);
  $html = str_replace('>','>',$html);
  $html = str_replace('"','"',$html);
  $html = str_replace('<a ','<a target="_blank" ',$html);

  return $html;
}

foreach(twitter_parse($url,0) as $out)
{
  print html($out).'<br />';
}
?>
	</p>

</body> 
</html>

HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Twitterfeed</title> 
</head> 

<body>  

		<h4>Zuletzt getwittert</h4>
	<p>
<content type="html">Der Countdown läuft zur Magic-Bike-Rüdesheim 2011 am 25. Juni <a target="_blank" href="http://bit.ly/b1z8DH">http://bit.ly/b1z8DH</a></content><br />	</p>

</body> 
</html>

Zu deinem Punkt 1: Ich dachte einfach, wenn ich eine xml-Deklaration einfüge, dann passt es. Die Seite ist leider nur deshalb valide, weil der Code gar nicht ausgegeben wird.
 
Hab' mir schon gedacht, dass der Code nicht von dir ist...
Code:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"

"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Twitterfeed</title> 
</head> 

<body>  

        <h4>Zuletzt getwittert</h4>
<?php

$username = 'taunusstein';
$postlimit = '1';

$url = 'http://search.twitter.com/search.atom?q=from:' . $username . '&rpp=' . $postlimit;

if (preg_match_all('/<content type="html">(.*?)<\/content>/', file_get_contents($url), $content)){
	foreach ($content[1] as $c){
		echo "<p>" . str_replace("<a ", '<a target="_blank" ',
			str_replace(
				array("<", ">", """),
				array("<", ">", '"'),
				$c
			)
		) . "</p>";
	}
}
?>

</body> 
</html>
ein bisschen aufgeräumt, gekürzt und vor allem validiert. Ein paar Kritikpunkte von oben hab' ich dringelassen, nachdem ich nochmal darüber nachgedacht habe und doch noch den Sinn dahinter verstanden habe.
 
Hehe, du Nachtarbeiter kkapsner, ganz lieben Dank, dass du nochmal einen Blick auf das Konstrukt geworfen hast und - vor allem - dass du den Code so aufgehübscht hast, dass er - nun deutlich kürzer - den W3C Validator nicht mehr zu Klagen veranlasst. :icon7:

Du hast was gut bei mir, ich werde dich das nächste Mal wieder fragen. :D
 
Zurück
Oben