Пример #1
0
 static function fetchXML($params, $force = 0)
 {
     $rssurl = $params->get('rss_url', '');
     $items_limit = intval($params->get('items_limit', 10));
     $doCache = intval($params->get('scr_cache', 1));
     $CacheTime = intval($params->get('cache_time', 3600));
     $twitter_timeline = $params->get('twitter_timeline', 'user');
     $username = $params->get('twitter_username', '');
     $password = $params->get('twitter_password', '');
     $list = $params->get('twitter_list', '');
     if ($twitter_timeline == 'friends') {
         $rssurl = 'http://api.twitter.com/1/statuses/friends_timeline.xml';
     } else {
         if ($twitter_timeline == 'mentions') {
             $rssurl = 'http://api.twitter.com/1/statuses/mentions.xml';
         } else {
             if ($twitter_timeline == 'list') {
                 $rssurl = 'http://api.twitter.com/1/' . urlencode($username) . '/lists/' . urlencode($list) . '/statuses.xml';
             } else {
                 if ($twitter_timeline == 'user_rt' && $username != '') {
                     $rssurl = 'http://api.twitter.com/1/statuses/user_timeline.xml?screen_name=' . urlencode($username) . '&include_rts=true';
                 } else {
                     if ($username != '') {
                         $rssurl = 'http://api.twitter.com/1/statuses/user_timeline/' . urlencode($username) . '.xml';
                     } else {
                         $rssurl = str_replace('.rss', '.xml', $rssurl);
                     }
                 }
             }
         }
     }
     $feed_desc = 1;
     $item_desc = 1;
     $feed_array = array();
     $xmlDoc =& JFactory::getXMLParser('Simple');
     if ($doCache) {
         if (!class_exists('JCache')) {
             require_once JPATH_SITE . DS . 'libraries' . DS . 'joomla' . DS . 'cache' . DS . 'cache.php';
         }
         $options = array('defaultgroup' => 'mod_ajaxscroller', 'lifetime' => $CacheTime, 'checkTime' => true, 'caching' => true);
         $cache = new JCache($options);
         $cache->setLifeTime($CacheTime);
         if ($force) {
             // delete the cache, force the new fetch
             $cache->remove(md5($rssurl), 'mod_ajaxscroller');
         }
         if ($string = $cache->get(md5($rssurl), 'mod_ajaxscroller')) {
             $xmlDoc->loadString($string);
         } else {
             $xml = simplexml_load_file($rssurl);
             $string = $xml->asXML();
             $string = str_replace('georss:', 'georss_', $string);
             // simplexml doesn't like ':'
             $xmlDoc->loadString($string);
             $cache->store($xmlDoc->document->toString(), md5($rssurl));
         }
     } else {
         $xml = simplexml_load_file($rssurl);
         $string = $xml->asXML();
         $string = str_replace('georss:', 'georss_', $string);
         // simplexml doesn't like ':'
         $xmlDoc->loadString($string);
     }
     $root =& $xmlDoc->document;
     $statuses =& $root->children();
     $length = count($statuses);
     $total = $items_limit && $items_limit < $length ? $items_limit : $length;
     if ($total == 0) {
         $feed_array = $xmlDoc->loadString($string);
     }
     for ($i = 0; $i < $total; $i++) {
         $status =& $statuses[$i];
         $id =& $status->getElementByPath('id')->data();
         $created_at =& $status->getElementByPath('created_at')->data();
         $text =& $status->getElementByPath('text')->data();
         $source =& $status->getElementByPath('source')->data();
         $in_reply_to_status_id =& $status->getElementByPath('in_reply_to_status_id')->data();
         $in_reply_to_user_id =& $status->getElementByPath('in_reply_to_user_id')->data();
         $in_reply_to_screen_name =& $status->getElementByPath('in_reply_to_screen_name')->data();
         $user_id =& $status->getElementByPath('user')->getElementByPath('id')->data();
         $user_screen_name =& $status->getElementByPath('user')->getElementByPath('screen_name')->data();
         $user_profile_image_url =& $status->getElementByPath('user')->getElementByPath('profile_image_url')->data();
         $feed_array[$i]['item_href'] = 'http://twitter.com/' . $user_screen_name . '/statuses/' . $id;
         $feed_array[$i]['item_date'] = $created_at;
         $feed_array[$i]['item_title'] = $user_screen_name;
         //$text = htmlentities($text);
         $feed_array[$i]['item_desc'] = modAjaxScrollerCommonHelper::ajax_scroller_format_twitter($text, $params, $user_profile_image_url, $user_screen_name, $created_at, $source, $in_reply_to_user_id, $in_reply_to_screen_name, $in_reply_to_status_id);
     }
     return $feed_array;
 }
Пример #2
0
 static function fetchRSS($params, $force = 0)
 {
     $type = $params->get('type', '');
     $rssurl = $params->get('rss_url', '');
     $twitter_timeline = $params->get('twitter_timeline', 'user');
     $twitter_keyword = $params->get('twitter_keyword', '');
     if ($type == 'twitter' && $twitter_timeline == 'search') {
         $rssurl = 'http://search.twitter.com/search.atom?q=' . urlencode($twitter_keyword);
     }
     $items_limit = intval($params->get('items_limit', 10));
     $rss_image_only = intval($params->get('rss_image_only', 0));
     $doCache = intval($params->get('scr_cache', 1));
     $CacheTime = intval($params->get('cache_time', 3600));
     $feed_desc = 1;
     $item_desc = 1;
     $cacheDir = JPATH_BASE . DS . 'cache' . DS;
     $feed_array = array();
     $feed_array[0] = '';
     jimport('simplepie.simplepie');
     $simplepie = new SimplePie();
     // check if cache directory is writeable
     if (!is_writable($cacheDir) || !$doCache) {
         $simplepie->enable_cache(false);
     } else {
         // delete the cache file if fetch forced
         $cache_file = $cacheDir . md5($rssurl) . '.spc';
         if ($force && file_exists($cache_file)) {
             // delete the cache, force the new fetch
             @unlink($cache_file);
         }
         $simplepie->set_cache_name_function('md5');
         $simplepie->set_cache_location($cacheDir);
         $simplepie->set_cache_duration($CacheTime);
     }
     $simplepie->set_feed_url($rssurl);
     $simplepie->init();
     $simplepie->handle_content_type();
     if ($simplepie->data) {
         $rssDoc = $simplepie;
     } else {
         return 'Error: Feed not retrieved';
     }
     //$feed_array[0]['feed_title'] = @$rssDoc->get_title();
     //$feed_array[0]['feed_link'] = @$rssDoc->get_link();
     //$feed_array[0]['feed_desc'] = @$rssDoc->get_description();
     // items
     $feed_items = @$rssDoc->get_items();
     if (empty($feed_items)) {
         return 'Error: No items fetched';
     }
     if ($rss_image_only) {
         // filter only feeds that contain image
         $temp_array = array();
         foreach ($feed_items as $item) {
             $description = @$item->get_description();
             if ($description && stristr($description, 'img src')) {
                 $temp_array[] = $item;
             }
         }
         $feed_items = $temp_array;
     }
     if ($items_limit > 0) {
         $feed_items = array_slice($feed_items, 0, $items_limit);
     }
     foreach ($feed_items as $j => $item) {
         if (!is_null(@$item->get_link())) {
             $feed_array[0][$j]['item_href'] = $item->get_link();
         }
         if (!is_null(@$item->get_title())) {
             $feed_array[0][$j]['item_title'] = @$item->get_title();
         }
         if (!is_null(@$item->get_date())) {
             $feed_array[0][$j]['item_date'] = @$item->get_date();
         }
         if (@$item->get_description()) {
             $feed_array[0][$j]['item_desc'] = @$item->get_description();
             $feed_array[0][$j]['item_desc'] = str_replace('&apos;', "'", $feed_array[0][$j]['item_desc']);
         }
         // Twitter search
         if (preg_match('/^tag:search.twitter.com/', @$item->get_id())) {
             $user_profile_image_url = @$item->get_link(0, 'image');
             $user_screen_name = '';
             if (@$item->get_author()) {
                 $author = @$item->get_author();
                 if (isset($author->name)) {
                     $author = $author->name;
                     if (!empty($author) && stristr($author, ' ')) {
                         $author = explode(' ', $author);
                         $author = $author[0];
                         $user_screen_name = $author;
                     }
                 }
             }
             // Replace title
             $feed_array[0][$j]['item_title'] = $user_screen_name;
             // Replace text
             $text = $feed_array[0][$j]['item_desc'];
             $created_at = $feed_array[0][$j]['item_date'];
             $source = @$item->get_item_tags('http://api.twitter.com/', 'source');
             $source = @$item->sanitize($source[0]['data'], SIMPLEPIE_CONSTRUCT_HTML);
             $feed_array[0][$j]['item_desc'] = modAjaxScrollerCommonHelper::ajax_scroller_format_twitter($text, $params, $user_profile_image_url, $user_screen_name, $created_at, $source);
         }
     }
     //echo '<pre>'; print_r($feed_array[0]); die;
     return $feed_array[0];
 }