著名的“老司机”平台——汤不热(Tumblr),一直支持 RSS 输出。不过其中输出的图片尺寸是缩小版的。所以自制了这个简单的脚本,可将RSS中的小图网址替换为大图的网址,再输出。喜欢的朋友可以将这个 php 脚本放到自己的 php 虚拟主机中,以 site_name.com/tumblr.php?id=xxx 的方式来订阅。
例如:原来的 RSS 网址 http://wanimal1983.tumblr.com/rss, 转制后通过 http://site_name.com/tumblr.php?id=wanimal1983 来订阅。
脚本内容如下:
<?php
/**
* Aurhor: wizos
*/
// 制定配置
$user_id = $_GET["id"];
$config['start_url'] = 'http://'.$user_id.'.tumblr.com/rss';
$config['file_title'] = 'tumblr-'.$user_id;
$config['cache_time'] = 6*3600;
$config['output_encoding'] = 'utf-8';
check_cache ( $config );
$res = get_net( $config['start_url'] );
$res = preg_replace('/src="(.+?)_500\.jpg"/s', 'src="$1_1280.jpg"', $res );
$res = preg_replace('/<source\ssrc="http:\/\/.+?\/tumblr_(.+?)"/s', '<source src="http://vtt.tumblr.com/tumblr_$1.mp4"', $res );
//<source src="http://lingzai01.tumblr.com/video_file/t:8rtoLPwrJKhRw7BczIH2hQ/143310201992/tumblr_nvn07mfX021ufqkfe" type="video/mp4">
file_put_contents( $config['cache_file'] , $res );
header('Content-Type: text/xml; charset=utf-8') ;
@readfile( $config['cache_file'] );
function check_cache ( $config ){
$cache_folder = dirname( __FILE__ ).'/cache';
$cache_file = $cache_folder.'/'.$config['file_title'].'.xml' ; // 缓存文件藏在此处
$GLOBALS['config']['cache_file'] = $cache_file; // 方便下文使用
if ( is_file( $cache_file ) ){
$interval_time = time() - filemtime( $cache_file ) ; // 以秒为单位
if ( $interval_time < $config['cache_time'] ){
header('Content-Type: text/xml; charset='.$config['output_encoding']) ;
@readfile( $cache_file );
exit();
}
}elseif( !is_dir( $cache_folder ) ){
mkdir( $cache_folder );
}
}
function get_net( $url, $options = array() ){
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url );
curl_setopt($curl, CURLOPT_HEADER, 0);//非零值时,将 header 包含在输出中
curl_setopt($curl, CURLOPT_NOSIGNAL, 1);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);//设置不输出在浏览器上
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
return common_net( $url, $curl, $options );
}
function common_net( $url, $curl, $options = array() ){
if (preg_match('/^https/',$url)){
//$options[CURLOPT_SSL_VERIFYHOST] = 1;
$options[CURLOPT_SSL_VERIFYPEER] = 0;
}
curl_setopt_array($curl, $options);
$data = curl_exec($curl);
$curl_errno = curl_errno($curl);
curl_close($curl);//关闭cURL资源,并且释放系统资源
if($curl_errno>0){
return 'error';
}else{
return $data;
}
}
$feed_items = '';
$feed_header = '';
$feed_footer = '';
$encoding = '';
function make_feed ( $config ){
$GLOBALS['feed_header']= '<?xml version="1.0" encoding="'.$config['output_encoding'].'"?><rss version="2.0"><link rel="stylesheet" href="lib/rss.css"/><channel>
<title>'.$config['feed_title'].'</title>
<link>'.$config['start_url'].'</link>
<description>'.$config['feed_description'].'</description>';
$GLOBALS['feed_footer'] = '</channel></rss>';
$encoding = $config['output_encoding'];
}
function add_item ( $title, $link, $description, $author, $pubDate ){
if( ($title ==null || $title=='') && ($description ==null || $description=='') ){
return;
}
$GLOBALS['feed_items'] .='<item><title><![CDATA['.$title.']]></title><link>'.$link.'</link><description><![CDATA['.$description.']]></description><author>'.$author.'</author><pubDate>'.$pubDate.'</pubDate></item>';
}
function add_item_no_cdata ( $title, $link, $description, $author, $pubDate ){
if( ($title ==null || $title=='') && ($description ==null || $description=='') ){
return;
}
$GLOBALS['feed_items'] .='<item><title>'.$title.'</title><link>'.$link.'</link><description><![CDATA['.$description.']]></description><author>'.$author.'</author><pubDate>'.$pubDate.'</pubDate></item>';
}
function output_feed ( ){
if( $GLOBALS['feed_items'] ==null || $GLOBALS['feed_items']==''){
return;
}
return $GLOBALS['feed_header'].$GLOBALS['feed_items'].$GLOBALS['feed_footer'];
}
?>
是否需要墙外的服务器?
@youyu 必须要的,不然没法获取连接上 tumblr 来获取原生的 RSS