]>
git.wh0rd.org - tt-rss.git/blob - plugins/af_unburn/init.php
2 class Af_Unburn
extends Plugin
{
7 "Resolves feedburner and similar feed redirector URLs (requires CURL)" ,
11 function init ( $host ) {
14 $host -> add_hook ( $host :: HOOK_ARTICLE_FILTER
, $this );
17 function hook_article_filter ( $article ) {
18 $owner_uid = $article [ "owner_uid" ];
20 if (! function_exists ( "curl_init" ))
23 if (( strpos ( $article [ "link" ], "feedproxy.google.com" ) !== FALSE ||
24 strpos ( $article [ "link" ], "/~r/" ) !== FALSE ||
25 strpos ( $article [ "link" ], "feedsportal.com" ) !== FALSE )) {
27 if ( ini_get ( "safe_mode" ) ||
ini_get ( "open_basedir" )) {
28 $ch = curl_init ( geturl ( $article [ "link" ]));
30 $ch = curl_init ( $article [ "link" ]);
33 curl_setopt ( $ch , CURLOPT_TIMEOUT
, 5 );
34 curl_setopt ( $ch , CURLOPT_RETURNTRANSFER
, true );
35 curl_setopt ( $ch , CURLOPT_HEADER
, true );
36 curl_setopt ( $ch , CURLOPT_FOLLOWLOCATION
, ! ini_get ( "safe_mode" ) && ! ini_get ( "open_basedir" ));
37 curl_setopt ( $ch , CURLOPT_USERAGENT
, SELF_USER_AGENT
);
39 if ( defined ( '_CURL_HTTP_PROXY' )) {
40 curl_setopt ( $ch , CURLOPT_PROXY
, _CURL_HTTP_PROXY
);
45 $real_url = curl_getinfo ( $ch , CURLINFO_EFFECTIVE_URL
);
50 /* remove the rest of it */
52 $query = parse_url ( $real_url , PHP_URL_QUERY
);
54 if ( $query && strpos ( $query , "utm_source" ) !== FALSE ) {
56 parse_str ( $query , $args );
58 foreach ( array ( "utm_source" , "utm_medium" , "utm_campaign" ) as $param ) {
59 if ( isset ( $args [ $param ])) unset ( $args [ $param ]);
62 $new_query = http_build_query ( $args );
64 if ( $new_query != $query ) {
65 $real_url = str_replace ( "? $query " , "? $new_query " , $real_url );
69 $real_url = preg_replace ( "/ \? $/" , "" , $real_url );
71 $article [ "plugin_data" ] = "unburn, $owner_uid :" . $article [ "plugin_data" ];
72 $article [ "link" ] = $real_url ;
79 function geturl ( $url ){
81 ( function_exists ( 'curl_init' )) ?
'' : die ( 'cURL Must be installed for geturl function to work. Ask your host to enable it or uncomment extension=php_curl.dll in php.ini' );
84 $header [ 0 ] = "Accept: text/xml,application/xml,application/xhtml+xml," ;
85 $header [ 0 ] .= "text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5" ;
86 $header [] = "Cache-Control: max-age=0" ;
87 $header [] = "Connection: keep-alive" ;
88 $header [] = "Keep-Alive: 300" ;
89 $header [] = "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7" ;
90 $header [] = "Accept-Language: en-us,en;q=0.5" ;
91 $header [] = "Pragma: " ;
93 curl_setopt ( $curl , CURLOPT_URL
, $url );
94 curl_setopt ( $curl , CURLOPT_USERAGENT
, 'Mozilla/5.0 (Windows NT 5.1; rv:5.0) Gecko/20100101 Firefox/5.0 Firefox/5.0' );
95 curl_setopt ( $curl , CURLOPT_HTTPHEADER
, $header );
96 curl_setopt ( $curl , CURLOPT_HEADER
, true );
97 curl_setopt ( $curl , CURLOPT_REFERER
, $url );
98 curl_setopt ( $curl , CURLOPT_ENCODING
, 'gzip,deflate' );
99 curl_setopt ( $curl , CURLOPT_AUTOREFERER
, true );
100 curl_setopt ( $curl , CURLOPT_RETURNTRANSFER
, true );
101 //curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true); //CURLOPT_FOLLOWLOCATION Disabled...
102 curl_setopt ( $curl , CURLOPT_TIMEOUT
, 60 );
104 $html = curl_exec ( $curl );
106 $status = curl_getinfo ( $curl );
109 if ( $status [ 'http_code' ]!= 200 ){
110 if ( $status [ 'http_code' ] == 301 ||
$status [ 'http_code' ] == 302 ) {
111 list ( $header ) = explode ( " \r\n\r\n " , $html , 2 );
113 preg_match ( "/(Location:|URI:)[^( \n )]*/" , $header , $matches );
114 $url = trim ( str_replace ( $matches [ 1 ], "" , $matches [ 0 ]));
115 $url_parsed = parse_url ( $url );
116 return ( isset ( $url_parsed )) ?
geturl ( $url ): '' ;
119 foreach ( $status as $key => $eline ){ $oline .= '[' . $key . ']' . $eline . ' ' ;}
120 $line = $oline . " \r\n " . $url . " \r\n ----------------- \r\n " ;
121 $handle = @fopen
( './curl.error.log' , 'a' );
122 fwrite ( $handle , $line );
128 function api_version () {