Может и можно. Нет времени разбираться. Но вам ведь уже многое известно, так что "вперед и с песней!"
И с песней пробовал и без неё - данные (JSON) со страницы http://ru.investing.com/indices/us-spx-500 НЕ ИЗВЛЕКАЮТСЯ. URL уводить в какие-то дебри. И что характерно, никто не может разобраться (Спрашивал на других форумах).
Может и можно. Нет времени разбираться. Но вам ведь уже многое известно, так что "вперед и с песней!"
И с песней пробовал и без неё - данные (JSON) со страницы http://ru.investing.com/indices/us-spx-500 НЕ ИЗВЛЕКАЮТСЯ. URL уводить в какие-то дебри. И что характерно, никто не может разобраться (Спрашивал на других форумах).Vostok
"Посылая кого-то в Google, Помните, завтра туда могут Послать Вас !"
Я вам ответил на других форумах,у меня получилось без проблем методом GET взять минутки.
Цитата
И что характерно, никто не может разобраться
. Этому есть причина.Вся эта песня занимает очень много времени. Кто захочет даром терять свое время. Открою большую тайну. Как правило,парсеры пишутся за деньги .В зависимости от сайта и задач цена может достигать 3-4 сотен американских рублей.
Я вам ответил на других форумах,у меня получилось без проблем методом GET взять минутки.
Цитата
И что характерно, никто не может разобраться
. Этому есть причина.Вся эта песня занимает очень много времени. Кто захочет даром терять свое время. Открою большую тайну. Как правило,парсеры пишутся за деньги .В зависимости от сайта и задач цена может достигать 3-4 сотен американских рублей.doober
Открою большую тайну. Как правило,парсеры пишутся за деньги
Мне не нужен Парсер. Мне нужно знать почему мой конкретный запросчик, приведённый выше (Сообщение 89), не выдаёт мне .responseText, хотя по сути - должен.
Открою большую тайну. Как правило,парсеры пишутся за деньги
Мне не нужен Парсер. Мне нужно знать почему мой конкретный запросчик, приведённый выше (Сообщение 89), не выдаёт мне .responseText, хотя по сути - должен.Vostok
"Посылая кого-то в Google, Помните, завтра туда могут Послать Вас !"
Сообщение отредактировал Vostok - Вторник, 16.12.2014, 14:43
Ваш пример на другом форуме не даёт требуемого результата. Что в в том примере принципиально нового в отличие от запросчика, приведённого мною здесь в Сообщение № 89 ??? Только финансовый инструмент и Set XMLHTTP = CreateObject("Microsoft.XMLHTTP") под IE ?
Ну а то, что у Вас XMLHTTP.responseText возвращает JSON - это наверное Здорово, но, увы, это не ответ на проблемный вопрос. Я бы как раз таки хотел узнать почему один и тот же код у Вас даёт один результат, а у меня - другой. Очень интересно. У меня по этому поводу есть отличнейшая версия :-)
Ваш пример на другом форуме не даёт требуемого результата. Что в в том примере принципиально нового в отличие от запросчика, приведённого мною здесь в Сообщение № 89 ??? Только финансовый инструмент и Set XMLHTTP = CreateObject("Microsoft.XMLHTTP") под IE ?
Ну а то, что у Вас XMLHTTP.responseText возвращает JSON - это наверное Здорово, но, увы, это не ответ на проблемный вопрос. Я бы как раз таки хотел узнать почему один и тот же код у Вас даёт один результат, а у меня - другой. Очень интересно. У меня по этому поводу есть отличнейшая версия :-)Vostok
"Посылая кого-то в Google, Помните, завтра туда могут Послать Вас !"
Сообщение отредактировал Vostok - Вторник, 16.12.2014, 14:49
Похоже как и у тех кому я дал этот код на тест. Результат был такой же. Лично сам запускал макрос из под Windows XP Proffesional SP3 и Windows XP Home Edition SP3 на разных компьютерах.
Дело вряд ли в этом. Скорее всего на сайте стоит "блокировка" такого рода запроса. Нужно штудировать специфику XMLHttpRequest. Здесь я не в теме .... Мало простых доходчивых примеров, да ещё и применительно к VB, что вдвойне затрудняет картину. Кругом штатные переписанные многократно статьи и ноль информации о нюансах, личном опыте работы с XMLHttpRequest. А по англоязычным сайтам я не силён.
И что конкретно может быть в таком случае с виндой? В спецификации XMLHTTPRequest я не нашёл ни слова о требованиях к винде и возможных на этой почве ошибках. Может не там смотрел? Не знаю. Глаз уже "замылился". Ты кстати, что имеешь в виду, говоря о винде? Ошибки системы или версию?
Похоже как и у тех кому я дал этот код на тест. Результат был такой же. Лично сам запускал макрос из под Windows XP Proffesional SP3 и Windows XP Home Edition SP3 на разных компьютерах.
Дело вряд ли в этом. Скорее всего на сайте стоит "блокировка" такого рода запроса. Нужно штудировать специфику XMLHttpRequest. Здесь я не в теме .... Мало простых доходчивых примеров, да ещё и применительно к VB, что вдвойне затрудняет картину. Кругом штатные переписанные многократно статьи и ноль информации о нюансах, личном опыте работы с XMLHttpRequest. А по англоязычным сайтам я не силён.
И что конкретно может быть в таком случае с виндой? В спецификации XMLHTTPRequest я не нашёл ни слова о требованиях к винде и возможных на этой почве ошибках. Может не там смотрел? Не знаю. Глаз уже "замылился". Ты кстати, что имеешь в виду, говоря о винде? Ошибки системы или версию?Vostok
"Посылая кого-то в Google, Помните, завтра туда могут Послать Вас !"
Сообщение отредактировал Vostok - Среда, 17.12.2014, 13:59
Я предлагаю установить фидлер и посмотреть на обмен с сервером. Возможно еще пароль присутствует для обмена,есть такие сайты. Надо смотреть обмен в конкретной обстановке.
Я предлагаю установить фидлер и посмотреть на обмен с сервером. Возможно еще пароль присутствует для обмена,есть такие сайты. Надо смотреть обмен в конкретной обстановке.doober
Возможно еще пароль присутствует для обмена,есть такие сайты.
Ну ты ведь пароль никакой не вводишь? А я, кстати, регистрировался даже там, вводил пароль и логин в запросчик. (Может косяк в библиотеках? msxml2.dll и msxml.dll )
Возможно еще пароль присутствует для обмена,есть такие сайты.
Ну ты ведь пароль никакой не вводишь? А я, кстати, регистрировался даже там, вводил пароль и логин в запросчик. (Может косяк в библиотеках? msxml2.dll и msxml.dll )Vostok
"Посылая кого-то в Google, Помните, завтра туда могут Послать Вас !"
Сообщение отредактировал Vostok - Четверг, 18.12.2014, 12:18
[/vba] Ссылка передаётся , но сайт так-и-так возвращает ошибку 302. Может в настройках Excel покопаться? (Знать бы где копаться в таких случаях).Vostok
"Посылая кого-то в Google, Помните, завтра туда могут Послать Вас !"
Сообщение отредактировал Vostok - Суббота, 20.12.2014, 09:25
Function HTTPServer(ByVal URL As String) As String On Error Resume Next: Err.Clear Set XMLHTTP = CreateObject("MSXML2.ServerXMLHTTP.6.0") With XMLHTTP .Open "GET", URL, False .setRequestHeader "Accept-Language", "ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4" .setRequestHeader "Connection", "keep-alive" .setRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" .setRequestHeader "X-Requested-With", "XMLHttpRequest" '' .setRequestHeader "Referer", "http://ru.investing.com/indices/us-spx-500" .setRequestHeader "Content-Type", "application/json" .send HTTPServer = .responseText End With Set XMLHTTP =nothing End Function
[/vba]
Попробуйте этот вариант [vba]
Код
Function HTTPServer(ByVal URL As String) As String On Error Resume Next: Err.Clear Set XMLHTTP = CreateObject("MSXML2.ServerXMLHTTP.6.0") With XMLHTTP .Open "GET", URL, False .setRequestHeader "Accept-Language", "ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4" .setRequestHeader "Connection", "keep-alive" .setRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" .setRequestHeader "X-Requested-With", "XMLHttpRequest" '' .setRequestHeader "Referer", "http://ru.investing.com/indices/us-spx-500" .setRequestHeader "Content-Type", "application/json" .send HTTPServer = .responseText End With Set XMLHTTP =nothing End Function
Этот вариант я уже пробовал. Правда только в таком виде: [vba]
Код
Set XMLHTTP = CreateObject("MSXML2.ServerXMLHTTP")
[/vba]но результат и в том и другом случае - тот же, без изменений. Тут дело в том, что в ответ на запрос по URL приходит Редирект 302 (302 Found). И данный вариант [vba]
Код
On Error Resume Next: Err.Clear
[/vba] не спасает. И если браузеры с этим редиректом справляются успешно, хоть и в разной степени , то наш запросчик VBA - никак не справляется. Нужно как-то обойти этот редирект. Сервер выставляет статус 302 и перенаправляет через заголовок Location на страницу _http://ru.investing.com. Странно, как у вас он эту ошибку обходит.
Этот вариант я уже пробовал. Правда только в таком виде: [vba]
Код
Set XMLHTTP = CreateObject("MSXML2.ServerXMLHTTP")
[/vba]но результат и в том и другом случае - тот же, без изменений. Тут дело в том, что в ответ на запрос по URL приходит Редирект 302 (302 Found). И данный вариант [vba]
Код
On Error Resume Next: Err.Clear
[/vba] не спасает. И если браузеры с этим редиректом справляются успешно, хоть и в разной степени , то наш запросчик VBA - никак не справляется. Нужно как-то обойти этот редирект. Сервер выставляет статус 302 и перенаправляет через заголовок Location на страницу _http://ru.investing.com. Странно, как у вас он эту ошибку обходит.Vostok
"Посылая кого-то в Google, Помните, завтра туда могут Послать Вас !"
Сообщение отредактировал Vostok - Воскресенье, 21.12.2014, 09:53
Set XMLHTTP = CreateObject("Msxml2.XMLHTTP.2.6") With XMLHTTP .Open "GET", URL, False .setRequestHeader "Content-Type", "application/json" .setRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" .setRequestHeader "Accept", "application/json, text/javascript, */*; q=0.01" .setRequestHeader "Accept-Language", "ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4" .setRequestHeader "Referer", "http://ru.investing.com/indices/us-spx-500" .setRequestHeader "x-requested-with", "XMLHttpRequest" .setRequestHeader "Accept-Encoding", "gzip, deflate" .setRequestHeader "Host", "ru.investing.com" .setRequestHeader "Connection", "Keep-Alive" .send End With
HD_TimeFrame = XMLHTTP.responseText ' Debug.Print HD_TimeFrame Set XMLHTTP = Nothing End Sub
[/vba]
В ответе пришёл JSON. После этого варианта вернулся для пробы на прежний код с [vba]
Код
Set XMLHTTP = CreateObject("Msxml2.XMLHTTP")
[/vba] и опять вернулся JSON. Похоже что причину проблемы установить не реально. Результат не устойчив. Надо ещё потестить, есть ещё как минимум 4 варианта. Но судя по тому, что по данному вопросу заинтересованных нет, кроме меня и doober, приводить другие примеры здесь вряд ли целесообразно? Не знаю. А вот поведение Fiddler не понятно. Почему он не реагирует на этот запрос, продолжая реагировать к примеру на запрос в Yahoo или в Bloomberg ?
[vba]
Код
Private Sub HD_TimeFrame_Bloomberg() 'BLOOMBERG Dim XMLHTTP As Variant, URL As String, HD_TF As String URL = "http://www.bloomberg.com/apps/data?pid=webpxta&Securities=INDU:IND&TimePeriod=3M&Outfields=HDATE,PR005-H,PR006-H,PR007-H,PR008-H,PR013-H,BOLMA,BOLUP,BOLLO,BOLBW,BOLPB,RSI,MACD,MACDS,MACD2,ROCP,ROCN,TASK,TASD,TASDS,TASDSS" Set XMLHTTP = CreateObject("MSXML2.XMLHTTP") With XMLHTTP .Open "GET", URL, False .setRequestHeader "Accept", "*/*" .setRequestHeader "Accept-Encoding", "gzip, deflate, sdch" .setRequestHeader "Accept-Language", "ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4" .setRequestHeader "Host", "www.bloomberg.com" .setRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" .setRequestHeader "X-Requested-With", "ShockwaveFlash/16.0.0.235" .setRequestHeader "Connection", "keep-alive" .setRequestHeader "Referer", "http://www.bloomberg.com/quote/INDU:IND/chart" .send End With HD_TF = XMLHTTP.responseText Set XMLHTTP = Nothing End Sub
[/vba]
Приходится принудительно в Fiddler очищать кэш, чего опять же не приходится делать с Yahoo или Bloomberg. Хотя все запросы идут методом GET. Кэширование побеждаем дополнением в код: [vba]
Код
.setRequestHeader "If-Modified-Since", "Sat, 1 Jan 2014 00:00:00 GMT"
[/vba]
Странно. Но отработал вот этот вариант, и куда-то пропала ошибка 302 (302 Found):
[vba]
Код
Sub HD_TimeFrame_() Dim XMLHTTP As Variant, URL As String, HD_TimeFrame As Variant
Set XMLHTTP = CreateObject("Msxml2.XMLHTTP.2.6") With XMLHTTP .Open "GET", URL, False .setRequestHeader "Content-Type", "application/json" .setRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" .setRequestHeader "Accept", "application/json, text/javascript, */*; q=0.01" .setRequestHeader "Accept-Language", "ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4" .setRequestHeader "Referer", "http://ru.investing.com/indices/us-spx-500" .setRequestHeader "x-requested-with", "XMLHttpRequest" .setRequestHeader "Accept-Encoding", "gzip, deflate" .setRequestHeader "Host", "ru.investing.com" .setRequestHeader "Connection", "Keep-Alive" .send End With
HD_TimeFrame = XMLHTTP.responseText ' Debug.Print HD_TimeFrame Set XMLHTTP = Nothing End Sub
[/vba]
В ответе пришёл JSON. После этого варианта вернулся для пробы на прежний код с [vba]
Код
Set XMLHTTP = CreateObject("Msxml2.XMLHTTP")
[/vba] и опять вернулся JSON. Похоже что причину проблемы установить не реально. Результат не устойчив. Надо ещё потестить, есть ещё как минимум 4 варианта. Но судя по тому, что по данному вопросу заинтересованных нет, кроме меня и doober, приводить другие примеры здесь вряд ли целесообразно? Не знаю. А вот поведение Fiddler не понятно. Почему он не реагирует на этот запрос, продолжая реагировать к примеру на запрос в Yahoo или в Bloomberg ?
[vba]
Код
Private Sub HD_TimeFrame_Bloomberg() 'BLOOMBERG Dim XMLHTTP As Variant, URL As String, HD_TF As String URL = "http://www.bloomberg.com/apps/data?pid=webpxta&Securities=INDU:IND&TimePeriod=3M&Outfields=HDATE,PR005-H,PR006-H,PR007-H,PR008-H,PR013-H,BOLMA,BOLUP,BOLLO,BOLBW,BOLPB,RSI,MACD,MACDS,MACD2,ROCP,ROCN,TASK,TASD,TASDS,TASDSS" Set XMLHTTP = CreateObject("MSXML2.XMLHTTP") With XMLHTTP .Open "GET", URL, False .setRequestHeader "Accept", "*/*" .setRequestHeader "Accept-Encoding", "gzip, deflate, sdch" .setRequestHeader "Accept-Language", "ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4" .setRequestHeader "Host", "www.bloomberg.com" .setRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" .setRequestHeader "X-Requested-With", "ShockwaveFlash/16.0.0.235" .setRequestHeader "Connection", "keep-alive" .setRequestHeader "Referer", "http://www.bloomberg.com/quote/INDU:IND/chart" .send End With HD_TF = XMLHTTP.responseText Set XMLHTTP = Nothing End Sub
[/vba]
Приходится принудительно в Fiddler очищать кэш, чего опять же не приходится делать с Yahoo или Bloomberg. Хотя все запросы идут методом GET. Кэширование побеждаем дополнением в код: [vba]
Код
.setRequestHeader "If-Modified-Since", "Sat, 1 Jan 2014 00:00:00 GMT"