make it possible to subscribe to password-protected feeds (closes #314)
This commit is contained in:
parent
dce0dc739f
commit
8d505d78e3
|
@ -370,7 +370,10 @@
|
|||
}
|
||||
}
|
||||
|
||||
function fetch_file_contents($url, $type = false) {
|
||||
function fetch_file_contents($url, $type = false, $login = false, $pass = false) {
|
||||
$login = urlencode($login);
|
||||
$pass = urlencode($pass);
|
||||
|
||||
if (USE_CURL) {
|
||||
$ch = curl_init($url);
|
||||
|
||||
|
@ -380,6 +383,11 @@
|
|||
curl_setopt($ch, CURLOPT_MAXREDIRS, 20);
|
||||
curl_setopt($ch, CURLOPT_BINARYTRANSFER, true);
|
||||
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
||||
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
|
||||
curl_setopt($fp, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
|
||||
|
||||
if ($login && $pass)
|
||||
curl_setopt($ch, CURLOPT_USERPWD, "$login:$pass");
|
||||
|
||||
$contents = @curl_exec($ch);
|
||||
if ($contents === false) {
|
||||
|
@ -387,15 +395,26 @@
|
|||
return false;
|
||||
}
|
||||
|
||||
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
|
||||
$content_type = curl_getinfo($ch, CURLINFO_CONTENT_TYPE);
|
||||
curl_close($ch);
|
||||
|
||||
if ($type && strpos($content_type, "$type") === false) {
|
||||
if ($http_code != 200 || $type && strpos($content_type, "$type") === false) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return $contents;
|
||||
} else {
|
||||
if ($login && $pass && $updated != 3) {
|
||||
$url_parts = array();
|
||||
|
||||
preg_match("/(^[^:]*):\/\/(.*)/", $url, $url_parts);
|
||||
|
||||
if ($url_parts[1] && $url_parts[2]) {
|
||||
$url = $url_parts[1] . "://$login:$pass@" . $url_parts[2];
|
||||
}
|
||||
}
|
||||
|
||||
return @file_get_contents($url);
|
||||
}
|
||||
|
||||
|
@ -2935,10 +2954,10 @@
|
|||
$has_oauth = db_fetch_result($result, 0, 'twitter_oauth');
|
||||
|
||||
if (!$has_oauth || strpos($url, '://api.twitter.com') === false) {
|
||||
if (!fetch_file_contents($url)) return 5;
|
||||
if (!fetch_file_contents($url, false, $auth_login, $auth_pass)) return 5;
|
||||
|
||||
if (url_is_html($url)) {
|
||||
$feedUrls = get_feeds_from_html($url);
|
||||
if (url_is_html($url, $auth_login, $auth_pass)) {
|
||||
$feedUrls = get_feeds_from_html($url, $auth_login, $auth_pass);
|
||||
if (count($feedUrls) == 0) {
|
||||
return 3;
|
||||
} else if (count($feedUrls) > 1) {
|
||||
|
@ -6759,15 +6778,17 @@
|
|||
*
|
||||
* @return array Array of feeds. Key is the full URL, value the title
|
||||
*/
|
||||
function get_feeds_from_html($url)
|
||||
function get_feeds_from_html($url, $login = false, $pass = false)
|
||||
{
|
||||
$url = fix_url($url);
|
||||
$baseUrl = substr($url, 0, strrpos($url, '/') + 1);
|
||||
|
||||
libxml_use_internal_errors(true);
|
||||
|
||||
$content = @fetch_file_contents($url, false, $login, $pass);
|
||||
|
||||
$doc = new DOMDocument();
|
||||
$doc->loadHTMLFile($url);
|
||||
$doc->loadHTML($content);
|
||||
$xpath = new DOMXPath($doc);
|
||||
$entries = $xpath->query('/html/head/link[@rel="alternate"]');
|
||||
$feedUrls = array();
|
||||
|
@ -6793,8 +6814,9 @@
|
|||
*
|
||||
* @return boolean True if the URL contains HTML content
|
||||
*/
|
||||
function url_is_html($url) {
|
||||
$content = substr(fetch_file_contents($url, false), 0, 1000);
|
||||
function url_is_html($url, $login = false, $pass = false) {
|
||||
$content = substr(fetch_file_contents($url, false, $login, $pass), 0, 1000);
|
||||
|
||||
if (stripos($content, '<html>') === false
|
||||
&& stripos($content, '<html ') === false
|
||||
) {
|
||||
|
|
Loading…
Reference in New Issue