Forum. MyNuke.ru

Forum. MyNuke.ru (http://forum.mynuke.ru/index.php)
-   Настройка и Изменение (http://forum.mynuke.ru/forumdisplay.php?f=11)
-   -   Доступ к Rss-каналу закрыт паролем (http://forum.mynuke.ru/showthread.php?t=899)

veland 30.11.2005 17:37

Доступ к Rss-каналу закрыт паролем
 
Нюкеры! Кто сталкивался с проблемой доступа к каналу новостей (RSS), если страница с xml-файлом требует ввода логина и пароля? Судя по всему, для решения проблемы нужно использовать библиотеку CURL. Поделитесь опытом или может быть скриптом, который передаст серверу логин/пароль.

Soniks 03.12.2005 03:21

veland ну можно и curl и через fsockopen, это все зависит как он требует ввод пароля?
попытайтесь сначало самым простым способом, добавить логин и пароли в строку запроса rss, т.е.

скажем файл rss доступин по адресу http://site.ru/rss.php? то с паролем будет выглядить так:
http://login:pass@site.ru/rss.php
обычно это помогает.

veland 07.12.2005 23:28

Всё получается, если попробовать зайти таким образом через броузер, но в функции headlines() используется доступ к rss-файлу через открытие сокета. Вопрос как передать пароль/логин не сильно изменяя саму функцию. Хотя подозреваю, что просто не получится - fsockopen() не допускает имя хоста, перед которым указаны логин/пароль. Есть ли выход? Мне это надо для доступа к новостям Консультант+, а тамошние программеры, не понятно по какой причине, закрыли эту страницу.

Soniks 08.12.2005 03:47

veland ну можите в принципе узнать у тамошних админов, почему закри, может откроют, или же у них уже есть скрипт для импорта.
а так можите почитать http://ru.php.net/manual/ru/function.fsockopen.php
там в коментариях даны пару вариантов передачи пароля, но не факт что сработает, тогда придется воспользоваться CURL

veland 08.12.2005 16:57

Поковырялся вчера вечером и переделал немного функцию headlines() - сделал новый блок, вместо сокета использовал передачу по HTTP, в принципе блок получился индивидуальным именно для этого RSS-канала, но при необходимости можно и доработать, чтобы при создании нового блока в админе указывать логин/пароль. Если есть интерес, могу выложить блок сюда. А пример его работы можно посмотреть здесь: http://www.kazakevich.ru/index.php - сайт в процессе строительства, блок называется "Rss-канал от Консультант Плюс"

veland 08.12.2005 20:27

Вот, как обещал, блок для доступа к rss-каналу, закрытому паролем:
Код:
<?php /************************************************** **********************/ /* PHP-NUKE: Web Portal System */ /* =========================== */ /* */ /* Copyright (c) 2005 by Francisco Burzi */ /* http://phpnuke.org */ /* */ /* This program is free software. You can redistribute it and/or modify */ /* it under the terms of the GNU General Public License as published by */ /* the Free Software Foundation; either version 2 of the License. */ /************************************************** **********************/ /* Block to fit perfectly in the center of the site, remember that not all blocks looks good on Center, just try and see yourself what fits your needs */ if (eregi("block-Consultant_rss-News.php", $_SERVER['PHP_SELF'])) { Header("Location: index.php"); die(); } $dir = "http://login:password@www.site.ru/rss/"; $fp = fopen($dir, "r"); if (!$fp) { $content = ""; $cont = 0; fclose($fp); return; } if ($fp) { $string = ""; while(!feof($fp)) { $pagetext = fgets($fp,300); $string .= $pagetext; } fclose($fp); $content = explode("\n",$string); ksort($content); $lencontent = count($content); $pos = strpos($content[$lencontent-5],"xml"); $file_name = strip_tags(trim(substr($content[$lencontent-5],43,$pos-11))); $rssfile = $dir.$file_name; } $fp = fopen($rssfile, "r"); if (!$fp) { $content = ""; $cont = 0; fclose($fp); return; } if ($fp) { $string = ""; while(!feof($fp)) { $pagetext = fgets($fp,300); $string .= chop($pagetext); } fclose($fp); $items = explode("</item>",$string); $content = "<font class=\"content\">"; for ($i=0;$i<10;$i++) { $link = ereg_replace(".*<link>","",$items[$i]); $link = ereg_replace("</link>.*","",$link); $cat = ereg_replace(".*<category>","",$items[$i]); $cat = ereg_replace("</category>.*","",$cat); $title2 = ereg_replace(".*<title>","",$items[$i]); $title2 = ereg_replace("</title>.*","",$title2); $title2 = stripslashes($title2); if (strcmp($link,$title2) AND $items[$i] != "") { $content .= "<div align=\"justify\"><img src=\"../images/pg.gif\" alt=\"\" width=\"11\" height=\"14\" border=\"0\" align=\"middle\" hspace=\"10\"><strong>".$cat.": </strong><a href=\"$link\" target=\"new\">".$title2."</a></div><hr width=\"80%\" size=\"1\">\n"; } } } ?>


Учтите, что строка
$file_name = strip_tags(trim(substr($content[$lencontent-5],43,$pos-11)));
индивидуальна для конкретного сайта Консультант+, и для другого сайта её, возможно, придётся изменить.

Soniks 09.12.2005 03:51

veland вот именно так и надо было поступить, это самый простой вариант :)


Часовой пояс GMT +4, время: 01:00.

Copyright © 2005 by Soniks