]>
git.wh0rd.org - tt-rss.git/blob - plugins/af_unburn/init.php
2 class Af_Unburn
extends Plugin
{
9 "Resolves feedburner and similar feed redirector URLs (requires CURL)" ,
13 function init ( $host ) {
14 $this -> link
= $host -> get_link ();
17 $host -> add_hook ( $host :: HOOK_ARTICLE_FILTER
, $this );
20 function hook_article_filter ( $article ) {
21 $owner_uid = $article [ "owner_uid" ];
23 if (! function_exists ( "curl_init" ))
26 if (( strpos ( $article [ "link" ], "feedproxy.google.com" ) !== FALSE ||
27 strpos ( $article [ "link" ], "/~r/" ) !== FALSE ||
28 strpos ( $article [ "link" ], "feedsportal.com" ) !== FALSE )) {
30 if ( strpos ( $article [ "plugin_data" ], "unburn, $owner_uid :" ) === FALSE ) {
32 $ch = curl_init ( geturl ( $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, true);
37 curl_setopt ( $ch , CURLOPT_USERAGENT
, SELF_USER_AGENT
);
39 $contents = @curl_exec
( $ch );
41 $real_url = curl_getinfo ( $ch , CURLINFO_EFFECTIVE_URL
);
46 /* remove the rest of it */
48 $query = parse_url ( $real_url , PHP_URL_QUERY
);
50 if ( $query && strpos ( $query , "utm_source" ) !== FALSE ) {
52 parse_str ( $query , $args );
54 foreach ( array ( "utm_source" , "utm_medium" , "utm_campaign" ) as $param ) {
55 if ( isset ( $args [ $param ])) unset ( $args [ $param ]);
58 $new_query = http_build_query ( $args );
60 if ( $new_query != $query ) {
61 $real_url = str_replace ( "? $query " , "? $new_query " , $real_url );
65 $real_url = preg_replace ( "/ \? $/" , "" , $real_url );
67 $article [ "plugin_data" ] = "unburn, $owner_uid :" . $article [ "plugin_data" ];
68 $article [ "link" ] = $real_url ;
70 } else if ( isset ( $article [ "stored" ][ "link" ])) {
71 $article [ "link" ] = $article [ "stored" ][ "link" ];
78 function geturl ( $url ){
80 ( 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' );
83 $header [ 0 ] = "Accept: text/xml,application/xml,application/xhtml+xml," ;
84 $header [ 0 ] .= "text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5" ;
85 $header [] = "Cache-Control: max-age=0" ;
86 $header [] = "Connection: keep-alive" ;
87 $header [] = "Keep-Alive: 300" ;
88 $header [] = "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7" ;
89 $header [] = "Accept-Language: en-us,en;q=0.5" ;
90 $header [] = "Pragma: " ;
92 curl_setopt ( $curl , CURLOPT_URL
, $url );
93 curl_setopt ( $curl , CURLOPT_USERAGENT
, 'Mozilla/5.0 (Windows NT 5.1; rv:5.0) Gecko/20100101 Firefox/5.0 Firefox/5.0' );
94 curl_setopt ( $curl , CURLOPT_HTTPHEADER
, $header );
95 curl_setopt ( $curl , CURLOPT_HEADER
, true );
96 curl_setopt ( $curl , CURLOPT_REFERER
, $url );
97 curl_setopt ( $curl , CURLOPT_ENCODING
, 'gzip,deflate' );
98 curl_setopt ( $curl , CURLOPT_AUTOREFERER
, true );
99 curl_setopt ( $curl , CURLOPT_RETURNTRANSFER
, true );
100 //curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true); //CURLOPT_FOLLOWLOCATION Disabled...
101 curl_setopt ( $curl , CURLOPT_TIMEOUT
, 60 );
103 $html = curl_exec ( $curl );
105 $status = curl_getinfo ( $curl );
108 if ( $status [ 'http_code' ]!= 200 ){
109 if ( $status [ 'http_code' ] == 301 ||
$status [ 'http_code' ] == 302 ) {
110 list ( $header ) = explode ( " \r\n\r\n " , $html , 2 );
112 preg_match ( "/(Location:|URI:)[^( \n )]*/" , $header , $matches );
113 $url = trim ( str_replace ( $matches [ 1 ], "" , $matches [ 0 ]));
114 $url_parsed = parse_url ( $url );
115 return ( isset ( $url_parsed )) ?
geturl ( $url , $referer ): '' ;
118 foreach ( $status as $key => $eline ){ $oline .= '[' . $key . ']' . $eline . ' ' ;}
119 $line = $oline . " \r\n " . $url . " \r\n ----------------- \r\n " ;
120 $handle = @fopen
( './curl.error.log' , 'a' );
121 fwrite ( $handle , $line );