Hinweis: Twitter hat seine API v1 am 11. Juni 2013 abgeschaltet (LINK) (https://dev.twitter.com/docs/api/1.1/overview) - leider unterstützt die API v1.1 nur noch JSON und kein RSS-Feed :mad:
Hallo hier stelle ich euch mein
Fading Twitter Feed Ticker
für MODx (benötigt jQuery für das Fading) per cURL und SimpleXML vor
Sollte auch mit file_get_contents funktionieren (ungetestet).
Snippet 'TwitterFeed'
<?php
# V 13.02.003
#
# Mit PHP5 direkt Twitter-XML-Dateien (RSS-Feed) verarbeiten
# Benötigt ein aktiviertes allow_url_fopen oder ein installiertes cURL-Modul!
#
# http://api.twitter.com/1/statuses/user_timeline.rss?screen_name=[DeinTwitterAccount]
#
# Beispiel Chunk Aufruf:
# [[!$TwitterFeed? &TWaccount=`twitter` &TWcount=`10` &TWfading=`5000` &TWtpl=`tplTwitterFeed`]]
#
#
# Variablen -Start------------------->
$intCount = $modx->getOption('limit',$scriptProperties,10);
$strAccount = $modx->getOption('account',$scriptProperties,'twitter');
$strTargetURL='http://api.twitter.com/1/statuses/user_timeline.rss?screen_name='.$strAccount;
$tpl = $modx->getOption('tpl',$scriptProperties,'tplTwitterFeed');
$intFading = $modx->getOption('fading',$scriptProperties,5000);
# Variablen -Ende-------------------<
#
#
# Methode zum abholen der Daten wählen -Start------------------->
if (function_exists('curl_version')) {
# mit cURL XML Daten von Twitter holen
$strArray = array('Accept-Language: '.$_SERVER["HTTP_ACCEPT_LANGUAGE"]);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $strTargetURL);
curl_setopt($ch, CURLOPT_HTTPHEADER, $strArray);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 4);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
$feed = curl_exec($ch);
$intReturnCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
# prüfe ob die Seite erreichbar ist!
if ($intReturnCode != 200 && $intReturnCode != 302 && $intReturnCode != 304) { return 'ERROR RSS-Feed'; };
}
else if (file_get_contents(__FILE__) && ini_get('allow_url_fopen')) {
# mit file_get_contents XML Daten holen
$feed = file_get_contents($strTargetURL);
}
else
{
return 'Weder cURL installiert, noch allow_url_fopen aktiviert!';
}
# Methode zum abholen der Daten wählen -Ende-------------------<
# konvertiert in UTF-8
$feed = utf8_encode($feed);
# Feed als neue SimpleXML Element aufsetzen
$xml = new SimpleXmlElement($feed);
# Namensraum deklarieren
$xml->registerXPathNamespace('twitter', 'http://api.twitter.com/');
#print_r($xml);
#print $xml->asXML();
$title = $xml->xpath('//channel/item/title');
$description = $xml->xpath('//channel/item/description');
$pubDate = $xml->xpath('//channel/item/pubDate');
$guid = $xml->xpath('//channel/item/guid');
$link = $xml->xpath('//channel/item/link');
# Platzhalter -Start------------------->
$modx->setPlaceholder('TWaccount', $strAccount);
$modx->setPlaceholder('TWtpl', $tpl);
$modx->setPlaceholder('TWfading', $intFading);
$intCount = $intCount; #(limitiert die Ausgabe)
for($i=1; $i <= $intCount; $i++) {
$modx->setPlaceholder('TWcount', $i);
$modx->setPlaceholder('TWtitle'.$i, trim($title[$i]));
$modx->setPlaceholder('TWdescription'.$i, trim($description[$i]));
$modx->setPlaceholder('TWpubDate'.$i, trim($pubDate[$i]));
$modx->setPlaceholder('TWguid'.$i, trim($guid[$i]));
$modx->setPlaceholder('TWlink'.$i, trim($link[$i]));
$output.= $modx->parseChunk($tpl, $modx->placeholders, '[[+', ']]');
}
# Platzhalter -Ende-------------------<
return $output;
Snippet 'twitterFilter' um den Twitter Namen zu entfernen
<?php
// strip the twitter username
$input = preg_replace('@(http?://([-\w\.]+)+(:\d+)?(/([\w/_\.]*(\?\S+)?)?)?)@', '$1', $input);
$intLen = strlen($modx->getPlaceholder('TWaccount')) + 1;
return substr($input,$intLen);
Snippet 'twitterParser' um die URLs zu formatieren
<?php
// properly formatted URLs
$input = preg_replace("#(^|[\n ])([\w]+?://[\w]+[^ \"\n\r\t< ]*)#", "\\1<a href=\"\\2\" target=\"_blank\">\\2</a>", $input);
$input = preg_replace("#(^|[\n ])((www|ftp)\.[^ \"\t\n\r< ]*)#", "\\1<a href=\"http://\\2\" target=\"_blank\">\\2</a>", $input);
$input = preg_replace("/@(\w+)/", "<a href=\"http://twitter.com/\\1\" target=\"_blank\">@\\1</a>", $input);
$input = preg_replace("/#(\w+)/", "<a href=\"http://search.twitter.com/search?q=\\1\" target=\"_blank\">#\\1</a>", $input);
return $input;
Chunk 'TwitterFeed' mit Fading (jQuery) und das Snippet getCache (http://modx.com/extras/package/getcache) zum Cachen (alle 30 Minuten)
<div id="div_twitter">
<h2>Tweets</h2>
<ul id="tweet">
[[!getCache?
&element=`TwitterFeed`
&cacheExpires=`1800`
&account=`[[+TWaccount]]`
&limit=`[[+TWcount]]`
&fading=`[[+TWfading]]`
&tpl=`[[+TWtpl]]`]]
</ul>
<p style="text-align: center;">
<img style="float:left; margin:2px 2px 10px 20px;" src="assets/templates/tmp_jolichter/images/twitter_32x26.png" alt="@Twitter" width="20" height="16" />
<a title="Folge [[+TWaccount]] auf Twitter" href="http://twitter.com/[[+TWaccount]]" rel="nofollow" target="_blank">Folge auf Twitter</a>
</p>
</div>
<script type="text/javascript">
<!--
$(document).ready(function(){
var tweets = $("#tweet li");
showt(tweets);
})
var n = 0;
function showt(jq){
jq.eq(n).fadeIn(1000).delay([[+TWfading]]).fadeOut(1000, function(){
n++;
if (n == [[+TWcount]]) { n = 0; };
showt(jq);
});
}
//-->
</script>
Danke Joe Molloy (http://www.hyper-typer.com/) für den Tipp!Chunk 'tplTwitterFeed'
<li><p>
[[+TWtitle[[+TWcount]]:twitterFilter:twitterParser]]
<br /><br />
<span class="smallfont" style="float:right;"><a href="[[+TWlink[[+TWcount]]]]" target="_blank">[[+TWpubDate[[+TWcount]]:ago]]</a></span>
</p></li>
Ein wenig CSS und fertig :biggrin:
.tweet{word-wrap:break-word;} #tweet{min-height:120px; position:relative;} #tweet li{display:none;}
Aufgerufen wird der Feed dann einfach so:[[!$TwitterFeed? &TWaccount=`JoLichter` &TWcount=`10` &TWfading=`5000` &TWtpl=`tplTwitterFeed`]]
Parameter (in Klammer die Standardwerte):
TWaccount: Twitter Name (twitter)
TWcount: Anzahl der Tweets (10)
TWfading: Animationszeit in ms (5000)
TWtpl: Chunk Template (tplTwitterFeed)