2013-08-07 22:33:21 +02:00
< ? php
/**
* RssBridgeTwitter
* Based on https :// github . com / mitsukarenai / twitterbridge - noapi
2013-08-09 18:57:25 +02:00
*
* @ name Twitter Bridge
* @ description Returns user timelines or keyword search from http :// twitter . com without using their API .
* @ use1 ( q = " keyword search " )
* @ use2 ( u = " user timeline mode " )
2013-08-07 22:33:21 +02:00
*/
class RssBridgeTwitter extends RssBridgeAbstractClass
{
protected $bridgeName = 'Twitter Bridge' ;
protected $bridgeURI = 'http://twitter.com' ;
protected $bridgeDescription = 'Returns user timelines or keyword search from http://twitter.com without using their API.' ;
protected $cacheDuration = 5 ; // 5 minutes
protected function collectData ( $request ) {
$html = '' ;
if ( isset ( $request [ 'q' ])) { /* keyword search mode */
2013-08-09 18:57:25 +02:00
$html = file_get_html ( 'http://twitter.com/search/realtime?q=' . urlencode ( $request [ 'q' ]) . '+include:retweets&src=typd' ) or $this -> returnError ( 404 , 'no results for this query.' );
2013-08-07 22:33:21 +02:00
} elseif ( isset ( $request [ 'u' ])) { /* user timeline mode */
2013-08-09 18:57:25 +02:00
$html = file_get_html ( 'http://twitter.com/' . urlencode ( $request [ 'u' ])) or $this -> returnError ( 404 , 'requested username can\'t be found.' );
2013-08-07 22:33:21 +02:00
} else {
2013-08-09 18:57:25 +02:00
$this -> returnError ( 400 , 'You must specify a keyword (?q=...) or a Twitter username (?u=...).' );
2013-08-07 22:33:21 +02:00
}
$this -> items = Array ();
foreach ( $html -> find ( 'div.tweet' ) as $tweet ) {
$item [ 'username' ] = trim ( substr ( $tweet -> find ( 'span.username' , 0 ) -> plaintext , 1 )); // extract username and sanitize
$item [ 'fullname' ] = $tweet -> getAttribute ( 'data-name' ); // extract fullname (pseudonym)
$item [ 'avatar' ] = $tweet -> find ( 'img' , 0 ) -> src ; // get avatar link
$item [ 'id' ] = $tweet -> getAttribute ( 'data-tweet-id' ); // get TweetID
$item [ 'uri' ] = 'https://twitter.com' . $tweet -> find ( 'a.details' , 0 ) -> getAttribute ( 'href' ); // get tweet link
$item [ 'timestamp' ] = $tweet -> find ( 'span._timestamp' , 0 ) -> getAttribute ( 'data-time' ); // extract tweet timestamp
$item [ 'content' ] = str_replace ( 'href="/' , 'href="https://twitter.com/' , strip_tags ( $tweet -> find ( 'p.tweet-text' , 0 ) -> innertext , '<a>' )); // extract tweet text
$item [ 'title' ] = $item [ 'fullname' ] . ' (@' . $item [ 'username' ] . ') | ' . $item [ 'content' ];
$this -> items [] = $item ;
}
}
2013-08-09 18:57:25 +02:00
}
2013-08-07 22:33:21 +02:00
$bridge = new RssBridgeTwitter ();
2013-08-09 18:57:25 +02:00
$bridge -> process ();