Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Курсы валют 
:(
    Опции темы
Ripper
Дата 12.12.2013, 00:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Lonely soul...
**


Профиль
Группа: Участник
Сообщений: 920
Регистрация: 30.6.2004
Где: г. Москва

Репутация: 1
Всего: 23



Объясните пожалуйста, вот я хочу спарсить курс валют. http://www.cbr.ru/scripts/XML_daily.asp вот как бы XML. Все хорошо, но есть две проблемы

1. Сайт ЦБ РФ лежит пол дня постоянно
2. Когда он не лежит то используя любые ф-ии типа file_get_contents или simplexml_load_file я получаю connection refused, причем я особо не спамил, с разных компов заходил и получал одно и то же.

Я вообще никак не могу понять откуда достать курс ЦБ РФ в XML или JSON. Парсить сайты не хочется. Причем курс нужно получать часто, поэтому я его хочу закешировать где нибудь, и скажем раз в час обновлять, но я даже ни разу не могу получить этот курс. Такое чувство что я чего то не понимаю, но уже бесит честно говоря =\ У меня задача такая что на сайт будут стучаться каждые 30 секунд за этим курсом, допустим я его кеширую на часов 6, но мне нужно очень долго долбится чтобы получить xml-ку, и будет момент простоя пока я буду долбится чтобы положить в кеш ...

 smile  smile 


--------------------
"Он знает: надо смеяться над тем, что тебя мучит, иначе не сохранишь равновесия, иначе мир сведет тебя с ума" - Над кукушкиным гнездом
PM MAIL ICQ   Вверх
Sanchezzz
Дата 12.12.2013, 00:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1670
Регистрация: 19.11.2006
Где: Voronezh

Репутация: 41
Всего: 60



А если сказать что я браузер?)

Код

    function get_curl_content($ch,$url, $params_curl = false){
        curl_setopt_array($ch ,array(
            CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.94 Safari/537.36",
            CURLOPT_URL            => $url,
            //CURLOPT_ENCODING => 'gzip',
            CURLOPT_RETURNTRANSFER => 1,
            CURLOPT_FOLLOWLOCATION => 1,
            CURLOPT_CONNECTTIMEOUT => 20,
            CURLOPT_TIMEOUT        => 30,
            CURLOPT_SSL_VERIFYPEER => 0,
            CURLOPT_SSL_VERIFYHOST => 0
        ));
        if($params_curl) curl_setopt_array($ch , $params_curl);
        $content = (string)curl_exec( $ch );
        return $content;
    }
$ch = curl_init();
$xml_str =  get_curl_content($ch,'http://www.cbr.ru/scripts/XML_daily.asp ');
curl_close($ch);





--------------------
Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS.
PM MAIL Skype GTalk   Вверх
Ripper
Дата 12.12.2013, 00:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Lonely soul...
**


Профиль
Группа: Участник
Сообщений: 920
Регистрация: 30.6.2004
Где: г. Москва

Репутация: 1
Всего: 23



Ща проверю... если это заработает то я прям расплачусь от счастья)
Только вот щас CBR отпустит (он не доступен опять у меня)

Ну вот в браузере (когда сайт не лежит) открывается всегда, в PHP раза 3 из 30 проскочило) я просто вывел $xml_str


Это сообщение отредактировал(а) Ripper - 12.12.2013, 00:43


--------------------
"Он знает: надо смеяться над тем, что тебя мучит, иначе не сохранишь равновесия, иначе мир сведет тебя с ума" - Над кукушкиным гнездом
PM MAIL ICQ   Вверх
krypt3r
Дата 12.12.2013, 06:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 359
Регистрация: 9.6.2009

Репутация: 3
Всего: 16



У меня в кроне скрипт с курлом нормально работает вот уже 1.5-2 года. Курл вот с такими настройками
Код

curl_setopt ($c, CURLOPT_URL, $url);
curl_setopt ($c, CURLOPT_USERAGENT, 'Googlebot/2.1');
curl_setopt ($c, CURLOPT_REFERER, 'http://www.cbr.ru/');
curl_setopt ($c, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt ($c, CURLOPT_RETURNTRANSFER, 1);

PM MAIL   Вверх
Ripper
Дата 12.12.2013, 10:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Lonely soul...
**


Профиль
Группа: Участник
Сообщений: 920
Регистрация: 30.6.2004
Где: г. Москва

Репутация: 1
Всего: 23



Блин, что-то совсем не то.

Код

    private function get_curl_content($ch, $url) {
        curl_setopt ($ch, CURLOPT_URL, $url);
        curl_setopt ($ch, CURLOPT_USERAGENT, 'Googlebot/2.1');
        curl_setopt ($ch, CURLOPT_REFERER, 'http://www.cbr.ru/');
        curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 1);
        curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);

        $exec = curl_exec($ch);
        if ($exec === false) {
            dd(curl_error($ch));
        } else {
            $content = (string)curl_exec( $ch );
            dd($content);
        }
        return $content;
    }


Вот функция. Вызываю 

Код

        $ch = curl_init();
        $xml_str =  $this->get_curl_content($ch,'http://www.cbr.ru/scripts/XML_daily.asp ');


Открываю в ФФ сам сайт - ХМЛ открывается. Открываю свой скрипт - 1 из 20 раз выдает ХМЛ, остальное время 
curl_error(...) string (24) "couldn't connect to host"




--------------------
"Он знает: надо смеяться над тем, что тебя мучит, иначе не сохранишь равновесия, иначе мир сведет тебя с ума" - Над кукушкиным гнездом
PM MAIL ICQ   Вверх
doctor2k
Дата 14.12.2013, 03:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 59
Регистрация: 15.5.2010
Где: Russia, Samara

Репутация: нет
Всего: нет



Рефакторинг - просто странное слово?

Вместо вот этого вот:
Код

 $exec = curl_exec($ch);
        if ($exec === false) {
            dd(curl_error($ch));
        } else {
            $content = (string)curl_exec( $ch );
            dd($content);
        }
        return $content;

попробуй сделать так:
Код

$response = curl_exec( $ch );

        $result = array();
        $result[ 'info' ] = curl_getinfo( $ch );

        if( curl_errno( $ch ) ):
            $result[ 'error' ] = curl_error( $ch );
        else:
            $result[ 'data' ] = $response;
        endif;

        curl_close( $ch );
        return $result;

на выходе получишь массив вида:
Код

array (
    [info] => ... , // заголовки и прочая фигня
    [error] => ... , // ошибка (если есть)
    [data] => ... // то шо надо, если нет ошибок
)



Добавлено через 2 минуты и 2 секунды
Да, и пример валидных опций:
Код

$curlOptions = array(   
         CURLOPT_AUTOREFERER => TRUE,
            CURLOPT_RETURNTRANSFER => TRUE,
            CURLOPT_FOLLOWLOCATION => TRUE,
            CURLOPT_USERAGENT => 'Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.0.9) Gecko/20061206 Firefox/1.5.0.9',
            // CURLOPT_CONNECTTIMEOUT => 3,
            CURLOPT_HEADER => FALSE,
            CURLOPT_VERBOSE => FALSE,
            CURLOPT_HTTPHEADER => array( "Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5", "Accept-Language: ru-ru,ru;q=0.7,en-us;q=0.5,en;q=0.3", "Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7", "Keep-Alive: 300" ),
            CURLOPT_SSL_VERIFYPEER => FALSE,
            CURLOPT_SSL_VERIFYHOST => FALSE
        );


обрати внимание, что таймаут тут не шутки ради закомменчен. при нестабильной работе сети это помогает
PM MAIL ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0484 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.