Страницы: Пред. 1 2
RSS
Многомерный массив (из web) в цикле и Redim его, грузить лишь даты и контракты (быстро)
 
Цитата
JeyCi написал: почему-то отрабатывает только с закомментированными (иначе Subscript out of range) заголовками:Код        '.setRequestHeader "Accept -Encoding", "gzip ,deflate"
кстати Игорь когда-то уже ответил #6 на этот вопрос
Цитата
Игорь написал: потому что, если сервер послушается, и отправит ответ в сжатом виде (gzip), — а такое бывает, в зависимости от настроек сайта, — то эта строка уже не сработает:... т.к. в responseText будут кракозябры.
может и в этом было дело...
Изменено: JeyCi - 06.08.2017 09:50:24
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
Цитата
JeyCi написал:
"Accept -Encoding", "gzip ,deflate"
Это не проблема :)
Код
Function GetHTTPResponse(ByVal sURL As String)
    On Error Resume Next
    Set oXMLHTTP = CreateObject("MSXML2.XMLHTTP")
    With oXMLHTTP
        .Open "GET", sURL, False
        .setRequestHeader "If-Modified-Since", "Thu, 1 Jan 1970 00:00:00 UTC"
        .setRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:32.0) Gecko/20100101 Firefox/32.0"
        .setRequestHeader "X-Requested-With", "XMLHttpRequest"
        .setRequestHeader "Accept -Encoding", "gzip ,deflate"
        .setRequestHeader "Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"
        .setRequestHeader "Upgrade-Insecure-Requests", "1"
        .send
        Set ADOStream = CreateObject("ADODB.Stream")
        ADOStream.Type = 1: ADOStream.Open
        ADOStream.Write .responseBody
        ADOStream.Position = 0
        ADOStream.Type = 2
        ADOStream.Charset = "utf-8"
        GetHTTPResponse = ADOStream.ReadText
        ADOStream.Close: Set ADOStream = Nothing
    End With
 
в дополнение к #29

Цитата
JeyCi написал: вижу  http://www.cmegroup.com/apps/cmegroup/widgets/productLibs/js/calendar.js - ковырнув его -
просто открыв в Notepad++
имеем очень стройный код .js

-java... чем-то напоминает C++ (поэтому даже почитать можно  :oops: )
Цитата
JeyCi написал: - замечен линк  http://www.cmegroup.com/apps/cmegroup/widgets/productLibs/mustache/calendar/opti­­ons.html
- что не совсем линк... а Шаблон (template)...
откуда он берёт эти getTableData - не совсем беглым взглядом понятно (потому что ему нужны Параметры, а мне надо всё по всем параметрам) - но как-то вытянули... и вытаскивает, видимо, структуру как в шаблоне... возможно, через jQuery?..
по комментам кода ajax calls from window hash...
вобщем код под спойлером требует более тщательного исследования... (но уже хоть читается легче)  8)
Спасибо Doober за ту идею
Изменено: JeyCi - 06.08.2017 16:45:18
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
Цитата
Doober написал: ADOStream.Charset = "utf-8"
ааа... так в этом было дело?  :idea:   .. сейчас поковыряюсь - где там написано, что это было utf-8?.. а то с ходу пока ещё не умею определять в какой кодировке страничка?... спасибо за новую идею  :)
да ещё и:
Цитата
Doober написал: ADOStream.Write .responseBody
вместо .responseText - забываю часто попробовать...
Изменено: JeyCi - 06.08.2017 15:38:22
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
Цитата
JeyCi написал:
что это было utf-8
А, Вы думаете, на кап сайтах кириллица будет.
UTF-8 или UTF-16 процентов на 99
 
Doober, гениально... я думала, ещё поди разберись Unicode или UTF...
***
и, похоже всё-таки всё дело в этой, добавленной вами ранее, строке
Код
        .setRequestHeader "Upgrade-Insecure-Requests", "1"
потому что Fiddler сам по себе ничего не показывает... в траффике можно перехватить только линк http://www.cmegroup.com/apps/cmegroup/widgets/productLibs/mustache/calendar/opti­ons.html , в котором
Код
   <tbody>
      {{#entries}}
      <tr>
         <th scope="row">{{contractMonth}}</td>
         <td>{{productCode}}</td>
         <td>{{firstTrade}}<br/>{{lastTrade}}</td>
         <td>{{settlement}}</td>
      </tr>
      {{/entries}}
   </tbody>
но кАк запрос добирается до тех json'ов вообще нЕвидно... сайт спрятал всё - если бы не старый код, то и не добраться до структуры... хотя какие-то скриптовые части есть по линку http://www.cmegroup.com/trading/equity-index/us-index/e-mini-sandp500_product_calendar_options.html?...  но мало что видно...
а из прежнего template, например, {{productCode}} и др. такие же в структуре шаблона (картинка ранее не сохранилась) - мне не совсем понятны... это что ? объект в объекте был ? на javascript языке ?
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
Цитата
{{firstTrade}}
Так записываются переменные в тело страницы.Скриптами они заполняются.
На примере Aspnet и 3-х фото  поясню.Первое фото-это серверная страница, записана роль .
Второе фото-скрипт выполнился в браузере, данные есть.
Третье фото-страница скачана.Скрипт не работал, имеем пусто.У них остается сама переменная типа {{firstTrade}}.
 
Цитата
Doober написал: Так записываются переменные в тело страницы
значит, когда делаем запрос GET - этого добра ещё нет... но нам помогает увидеть, что "за кулисами" этот  .setRequestHeader "Upgrade-Insecure-Requests", "1" ? (покопаю ещё его)... насколько понимаю, он даёт возможность видеть Итог загрузки страницы с выполненным скриптом?..
но вот, например, сам скрипт в #33... - меня смущает, что он дЕлает selEct... потом фильтрАцию по отобранному... и отбор для вывода
Код
var selectedOption = that.findInList(that.options, function(val) { return val.productId == selectProductId;}, that.options[0]);
findinList ?.. а хочется же весь List...  8)
с учётом того, что (насколько понимаю):
this.options = [];      <<< массив всех свойств
var that = this;         <<< одно и то же
и добились вы этого дополнением модуля Класса строками:
Код
Public Property Get ToArray2()
    Dim c As Collection
    Dim XYZ(), paralast
    ReDim res(0)
    XYZ = Me.To_C_Array    For n = 1 To UBound(XYZ)
        Set c = XYZ(n)
        For i = 1 To c.Count
            paralast = UBound(res) + 1
            ReDim Preserve res(paralast)
            res(paralast) = c(i).ToArray
        Next
    Next    
ToArray2 = res
End Property

Public Property Get To_C_Array()
    Dim c As Collection
    ReDim res(1 To Count)
    Set c = Me.Values
    For n = 1 To Count
        Set res(n) = c(n).Values(9).Values
    Next
    To_C_Array = res
End Property
??? просто пытаюсь понять корни вашей "чуйки"... чтобы представить, чтобы мы делали, если бы у меня не остался тот код, который родился ещё до того, как сайт спрятал всё с глаз долой...  :sceptic: и как мы это всё (без фильтрации) видим сейчас?.. "Tunnel", так сказать, хочется лицезреть  :oops: без отбора и фильтрации... возможно он в этой строке? (из #33.js) -
Код
var myArray = myQuerystring.split("&");
p.s.
но думаю, что без прежних наработок и вашей проф.интуиции мы вряд ли добрались бы до истоков... пытаюсь разглядеть траекторию  :) ... спасибо за помощь
Изменено: JeyCi - 06.08.2017 19:15:44
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
кстати причина в реал. файле была ещЁ банально проста
"Accept -Encoding", "gzip ,deflate"
"Accept-Encoding", "gzip, deflate"
(не там пробелЫ в заголовке был)  :oops:
p.s.
и для порядка  :) добавила код 'выгрузки массивов из словаря в #26 (чтобы не очень обрывок висел там от моего кода)
Изменено: JeyCi - 09.08.2017 19:01:13
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
Цитата
JeyCi написал: "Tunnel", так сказать, хочется лицезреть   без отбора и фильтрации...
оказалось банально просто при ближайшем рассмотрениив в Notepad++
после сохранения ответа сервера в html-файл
SaveTXTfile
он же сразу всё и показал
Код
<script type="text/javascript">var component = {};component.url = "/CmeWS/mvc/ProductCalendar/Future/133";
component.tableId = '#calendarOptionsProductTable1';
component.handler = "cme.component.product.CalendarOptionsComponent";
component.foi = "options";
component.extraData = {"text_firsttrade":"First Trade","text_settlement":"Settlement","componentId":1,"text_productcode":"Product Code","text_lasttrade":"Last Trade","text_aboutthisreport":"About This Report","text_type":"Type","tableId":"calendarOptionsProductTable1","currentPath":"/trading/equity-index/us-index/e-mini-sandp500_product_calendar_options.html","text_downloaddata":"Download Data","text_contractmonth":"Contract Month"};
component.options = [{"label":"American Options","optionType":"AME","name":"E-mini S&P 500 Options","productId":138,"productIds":[138],"daily":false,"weekly":false,"sto":false,"calendarEntries":[{"contractMonth":"Sep 2017","productCode":"ESU17","firstTrade":"19 Sep 2016","lastTrade":"15 Sep 2017","settlement":"15 Sep 2017","expirationDate":1504242000000},{"contractMonth":"Dec 2017","productCode":"ESZ17","firstTrade":"19 Dec 2016","lastTrade":"15 Dec 2017","settlement":"15 Dec 2017","expirationDate":1512108000000},{"contractMonth":"Mar 2018","productCode":"ESH18","firstTrade":"20 Mar 2017","lastTrade":"16 Mar 2018","settlement":"16 Mar 2018","expirationDate":1519884000000},{"contractMonth":"Jun 2018","productCode":"ESM18","firstTrade":"19 Jun 2017","lastTrade":"15 Jun 2018","settlement":"15 Jun 2018","expirationDate":1527829200000}]},{"label":"End of Month Options","optionType":"EOM","name":"E-mini S&P 500 EOM Options","productId":136,"productIds":[136],"daily":false,"weekly":false,"sto":false,"calendarEntries":[{"contractMonth":"Aug 2017","productCode":"EWQ17","firstTrade":"01 Mar 2017","lastTrade":"31 Aug 2017","settlement":"31 Aug 2017","expirationDate":1501563600000},{"contractMonth":"Sep 2017","productCode":"EWU17","firstTrade":"03 Apr 2017","lastTrade":"29 Sep 2017","settlement":"29 Sep 2017","expirationDate":1504242000000},{"contractMonth":"Oct 2017","productCode":"EWV17","firstTrade":"01 May 2017","lastTrade":"31 Oct 2017","settlement":"31 Oct 2017","expirationDate":1506834000000},{"contractMonth":"Nov 2017","productCode":"EWX17","firstTrade":"01 Jun 2017","lastTrade":"30 Nov 2017","settlement":"30 Nov 2017","expirationDate":1509512400000},{"contractMonth":"Dec 2017","productCode":"EWZ17","firstTrade":"03 Jul 2017","lastTrade":"29 Dec 2017","settlement":"29 Dec 2017","expirationDate":1512108000000},{"contractMonth":"Jan 2018","productCode":"EWF18","firstTrade":"01 Aug 2017","lastTrade":"31 Jan 2018","settlement":"31 Jan 2018","expirationDate":1514786400000}]},{"label":"Weekly Monday Option","optionType":"MW1","name":"E-mini S&P 500 Monday Weekly Options -","productId":8292,"productIds":[8292,8293,8294,8295,8296],"daily":false,"weekly":true,"sto":false,"calendarEntries":[{"contractMonth":"Aug 2017","productCode":"E1AQ17","firstTrade":"18 Jul 2017","lastTrade":"07 Aug 2017","settlement":"07 Aug 2017","expirationDate":1501563600000},{"contractMonth":"Aug 2017","productCode":"E2AQ17","firstTrade":"25 Jul 2017","lastTrade":"14 Aug 2017","settlement":"14 Aug 2017","expirationDate":1501563600000},{"contractMonth":"Aug 2017","productCode":"E3AQ17","firstTrade":"08 Aug 2017","lastTrade":"21 Aug 2017","settlement":"21 Aug 2017","expirationDate":1501563600000},{"contractMonth":"Aug 2017","productCode":"E4AQ17","firstTrade":"15 Aug 2017","lastTrade":"28 Aug 2017","settlement":"28 Aug 2017","expirationDate":1501563600000},{"contractMonth":"Sep 2017","productCode":"E1AU17","firstTrade":"22 Aug 2017","lastTrade":"05 Sep 2017","settlement":"05 Sep 2017","expirationDate":1504242000000}]},{"label":"Weekly Options","optionType":"WK1","name":"E-mini S&P 500 Weekly Options","productId":2915,"productIds":[2915,2916,8019,5222],"daily":false,"weekly":true,"sto":false,"calendarEntries":[{"contractMonth":"Aug 2017","productCode":"EW1Q17","firstTrade":"26 Jun 2017","lastTrade":"04 Aug 2017","settlement":"04 Aug 2017","expirationDate":1501563600000},{"contractMonth":"Aug 2017","productCode":"EW2Q17","firstTrade":"10 Jul 2017","lastTrade":"11 Aug 2017","settlement":"11 Aug 2017","expirationDate":1501563600000},{"contractMonth":"Aug 2017","productCode":"EW3Q17","firstTrade":"24 Apr 2017","lastTrade":"18 Aug 2017","settlement":"18 Aug 2017","expirationDate":1501563600000},{"contractMonth":"Aug 2017","productCode":"EW4Q17","firstTrade":"17 Jul 2017","lastTrade":"25 Aug 2017","settlement":"25 Aug 2017","expirationDate":1501563600000},{"contractMonth":"Sep 2017","productCode":"EW1U17","firstTrade":"31 Jul 2017","lastTrade":"01 Sep 2017","settlement":"01 Sep 2017","expirationDate":1504242000000},{"contractMonth":"Sep 2017","productCode":"EW2U17","firstTrade":"07 Aug 2017","lastTrade":"08 Sep 2017","settlement":"08 Sep 2017","expirationDate":1504242000000},{"contractMonth":"Sep 2017","productCode":"EW4U17","firstTrade":"14 Aug 2017","lastTrade":"22 Sep 2017","settlement":"22 Sep 2017","expirationDate":1504242000000},{"contractMonth":"Oct 2017","productCode":"EW3V17","firstTrade":"22 May 2017","lastTrade":"20 Oct 2017","settlement":"20 Oct 2017","expirationDate":1506834000000},{"contractMonth":"Nov 2017","productCode":"EW3X17","firstTrade":"24 Jul 2017","lastTrade":"17 Nov 2017","settlement":"17 Nov 2017","expirationDate":1509512400000},{"contractMonth":"Jan 2018","productCode":"EW3F18","firstTrade":"21 Aug 2017","lastTrade":"19 Jan 2018","settlement":"19 Jan 2018","expirationDate":1514786400000}]},{"label":"Weekly Wednesday Option","optionType":"WD1","name":"E-mini S&P 500 Wednesday Weekly Options -","productId":8227,"productIds":[8227,8228,8229,8230,8231],"daily":false,"weekly":true,"sto":false,"calendarEntries":[{"contractMonth":"Aug 2017","productCode":"E1CQ17","firstTrade":"20 Jul 2017","lastTrade":"02 Aug 2017","settlement":"02 Aug 2017","expirationDate":1501563600000},{"contractMonth":"Aug 2017","productCode":"E2CQ17","firstTrade":"27 Jul 2017","lastTrade":"09 Aug 2017","settlement":"09 Aug 2017","expirationDate":1501563600000},{"contractMonth":"Aug 2017","productCode":"E3CQ17","firstTrade":"03 Aug 2017","lastTrade":"16 Aug 2017","settlement":"16 Aug 2017","expirationDate":1501563600000},{"contractMonth":"Aug 2017","productCode":"E4CQ17","firstTrade":"10 Aug 2017","lastTrade":"23 Aug 2017","settlement":"23 Aug 2017","expirationDate":1501563600000},{"contractMonth":"Sep 2017","productCode":"E1CU17","firstTrade":"17 Aug 2017","lastTrade":"06 Sep 2017","settlement":"06 Sep 2017","expirationDate":1504242000000}]}];
component.optionProductId = 138;
component.formId = 1;
component.componentId = 1;
window.cmeComponents[window.cmeComponents.length]  = component;</script>
(значит близорукость лечится)  :)
P.S.
только формат последней даты какой-то странный "expirationDate":1504242000000 ?? (непонятно что за он и с чем его едят: пробую 25569+1504242000000/86400000мс - получается странно 01.09.2017, а должно быть 15.09.2017)  :(  
Изменено: JeyCi - 12.08.2017 17:24:54
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
Цитата
JeyCi написал:
1504242000000  
Все верно, 1 сентября а не 15
Проверять можно здесь , только последние 000 уберите.
 
нет Doober - если убрать, то безумное число получается, наверно, там всё-таки в милисекундах, поэтому и делить и на них... спасибо за проверку свежим взглядом!... я вот посмотрела на сайте - это поле expirationdate вообще на сайт не выводится, поэтому удивилась, что не помню дату 01,09,2017... думаю, говоря 01,09,2017, они имеют ввиду контракт сентябрьский - точность даты_экспирации их здесь не волнует (да и в выводе на сайт не участвует)... спасибо за проверку и за линк!!
p.s. я проверяла через activecell.Value=25569+1504242000000/86400000 --> Enter (в окне Immediate)
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
Принято время UNIX  передавать в секундах, некоторые в JS скриптах передают в миллисекундах.
Сайт с конвертром по моей ссылке работает с секундами, я и предлагал для проверки нолики лишние убрать
 
Цитата
Doober написал: Сайт с конвертром по моей ссылке работает с секундами, я и предлагал для проверки нолики лишние убрать
Понятно  :) спасибо за уточнение (что нолики убирать для вашего сайта, а не в моей формуле) - чтобы получить Unix Timestamp
Изменено: JeyCi - 13.08.2017 10:33:21
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
Страницы: Пред. 1 2
Наверх