что-то с темой у меня не получается... собрала по ячейке в кучу и выгрузила скопом... но это ведь не дело - не создать цикл в макросе... может кто-нибудь сможет помочь мне пролить свет на этот тёмный лес: 1) ручной парсинг(насколько понимаю я сделала) поместить в цикл (2 цикла получится по коду) 2) удалить элемент 2го столбца, если он If Not IsDate и предыдущий ему элемент (по строке из 1 столбца) - полагаю для этого дела переложить массив в новый, убрав лишнее, ну или заменив на 0 (тоже подойдёт)... очень хочу понять Redim - но пока никак... 3) обрезать часть html кода по примеру из комментов к статье http://www.planetaexcel.ru/techniques/3/53/ чтобы не читать его весь на каждом цикле... - наверно, тоже был бы вариант оптимизации...
на примере 1-го массива отразила (жёлтым) что надо удалить (или заменить на ноль), 2-й массив (если Redim 1-й, но как), 3-й массив выгружается макросом в М3 (идентичен первому)... по коду закомментированные цифры - это прибавляемое кол-во символов при чтении html - просто нужные данные располагаются в html-коде через одинаковые "расстояния" - так, наверно, проще будет, чем считать каждый раз...
вобщем, оптимизация напрашивается сама собой, а я пока в поисках... если ваши строки упростят мой ход мыслей - то, многомерность, циклы и redim сделают жизнь проще, наверно... надеюсь надолго!.. если вас не затруднит высказаться по этому вопросу... очень важно ( чувствую себя как без рук, когда во вложенном примере не могу этого реализовать)... многомерность однако
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
если убрать из вашего описания все «умные слова» - макросы, массивы, многомерность, циклы, redim и прочую муть, и описать задачу нормальным человеческим языком (вот здесь - исходные данные, вот такой надо получить результат, делаю вот так, получается вот так, а должно быть вот так) - то, глядишь, и помощи ждать долго не придётся.
А мы уж сами разберемся, где нужна многомерность и redim, а где надо сделать все иначе
PS: и вообще, ваша задача решается проще, - через веб-запрос На отдельном листе, жмёте ДАННЫЕ - ИЗ ИНТЕРНЕТА, вставляете туда ссылку, ок, ок, - и получаете на листе результат (который можно обновлять одной строкой кода - метод Refresh)
А потом останется написать простенький макрос, копирующий табличку с того листа в нужное вам место (или даже без этого, - можно формулами типа ВПР подтягивать данные прямо с листа веб-запроса)
Игорь пишет: PS: и вообще, ваша задача решается проще, - через веб-запрос На отдельном листе, жмёте ДАННЫЕ - ИЗ ИНТЕРНЕТА
даже уже написанным макросом (вложенным файлом ранее) быстрее чем ваш вариант... и в совокупности со всеми др задачами рабочего файла - оптимальнее...
Цитата
Игорь пишет: А мы уж сами разберемся, где нужна многомерность и redim, а где надо сделать все иначе
озвучила темы с которыми не получается разобраться, и на примере оптимизации данного макроса (в файле вложенном) хотела бы увидеть пример их реализации... а я уже сама разберусь где их можно будет использовать в будущем для моих задач...
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
Вариант - вытягиваем в переменную значение для второго столбца. Если это дата - то увеличиваем индекс, по индексу кладём эту дату, в первый столбец вытягиваем значение для первого столбца. В конце выгружаем верхушку массива согласно последнему индексу (только собранное). Ну и InStr(1, htmlcode, "calendarEntries") и InStr(1, htmlcode, "Euro FX Weekly Options") можно извлечь один раз и взять значения в переменные)
Другой вариант - когда собрано как у вас - объявить другой массив 14х2, переложить только строки с датами (увеличивая индекс). верхушку выгрузить.
Игорь: описать задачу нормальным человеческим языком (вот здесь - исходные данные, вот такой надо получить результат, делаю вот так, получается вот так, а должно быть вот так) - то, глядишь, и помощи ждать долго не придётся.
Я АБСОЛЮТНО согласна с Игорем. Формализация задачи - самый сложный этап автоматизации. Монологи - самый худший вариант описания задачи.
Public Function Parse_HTML(S)
S = Replace(S, Chr(34), "")
bRes = False
Set RegExp = CreateObject("VBScript.RegExp")
RegExp.Global = True
RegExp.IgnoreCase = True
RegExp.Pattern = "[{]contractMonth:(.+?),productCode:([A-Z0-9]+?),(.+?)settlement:([A-Z 0-9]+?)[}]"
bRes = RegExp.test(S)
If bRes Then
Set oMatches = RegExp.Execute(S)
ReDim X(1 To oMatches.Count, 1 To 2)
For n = 0 To oMatches.Count - 1
X(n + 1, 1) = oMatches(n).subMatches(1)
X(n + 1, 2) = oMatches(n).subMatches(3)
Next
End If
Parse_HTML = X
End Function
Sub load_K_exp()
'объявляем переменные
Dim sURI As String
Dim oHttp As Object
Dim htmlcode, outstr As String
Dim inpdate As Date
Dim d, m, y As Integer
Dim Arr As Variant
sURI = "http://www.cmegroup.com/trading/fx/g10/euro-fx_product_calendar_options.html"
'делаем запрос
On Error Resume Next
Set oHttp = CreateObject("MSXML2.XMLHTTP")
If Err.Number <> 0 Then
Set oHttp = CreateObject("MSXML.XMLHTTPRequest")
End If
On Error GoTo 0
If oHttp Is Nothing Then
Exit Sub
End If
oHttp.Open "GET", sURI, False
oHttp.send
'получаем HTML страницы с контрактами и извлекаем из него даты экспирации
htmlcode = oHttp.responseText
Arr = Parse_HTML(htmlcode)
Set oHttp = Nothing
[O3].Resize(UBound(Arr), UBound(Arr, 2)).Value = Arr
'IE.Quit
End Sub
Цитата
а я уже сама разберусь где их можно будет использовать в будущем для моих задач.
1 маленький цикл,все данные с таблицы можно взять.
Doober пишет: 1 маленький цикл,все данные с таблицы можно взять.
Doober спасибо большое вам, но они НЕ нужны мне все (только если когда-нибудь в будущем)... нужны только американские контракты, месячные и недельные... поскольку уже в excel выковыривать нужное, добавляя условия в формулы тоже не хотелось бы... по MSXML.XMLHTTP запросу тоже думала - но пока это для меня сложноватый синтаксис и ещё более тёмный лес - спасибо вам за пример со временем может и осилю... полагаю, это не совсем VBA, скорее VB (не знаю с чего начать с ним разбираться)... но в любом случае, спасибо... я с интересом уже посматривала на ваши такого рода посты ранее и думала, надо будет и мне с этим когда-нибудь разобраться...
а по теме: просто макрос, вложенный в 1-ом посте хотела бы узнать, можно ли как-то загнать в цикл (а то ведь я на калькуляторе прибавляла закоментированные цифры) и переложить в новый массив, удалив ненужное(или заменив на 0), после чего выгрузить этот массив... arr(i,j) обрабатывать в цикле по i и по j пока не умею... не знаю с чего начинать и как это должно выглядеть... имхо... вот и обращаюсь за помощью... и по i и по j и переложить redim'ом очень хочется на своём примере научиться применять ( а то на чужих не очень пока понимаю - что по строкам ложить, что по столбцам, в какой последовательности и как)
хотя может и в вашем варианте перед выгрузкой можно почистить данные, оставив лишь EC* и ?X* контракты и даты по ним???
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
Я практически никогда "Redim'ом не перекладываю" - т.к. 1. это работает только вширь, а нам обычно нужно вниз - т.е. в финале необходимо массив переворачивать 2. долго: каждый редим - это перекладывание всего массива в новый побольше (судя по потерям времени) 3. сложнее код.
Проще делать как я выше уже подсказал - создали массив сразу под максимальный размер, перекладываем только нужное, увеличивая индекс, в финале используем только собранное.
Хотя конечно если из миллиона нужно отобрать тысячу - то это неоптимально "тягать такой пустой хвост". Но обычно бывает наоборот - условно "из миллиона не нужна тысяча".
Проще делать как я выше уже подсказал - создали массив сразу под максимальный размер, перекладываем только нужное, увеличивая индекс, в финале используем только собранное.
Так и сделал
Скрытый текст
Код
Public Function Parse_HTML(S, PZ As Integer)
S = Replace(S, Chr(34), "")
bRes = False
Set RegExp = CreateObject("VBScript.RegExp")
RegExp.Global = True
RegExp.IgnoreCase = True
RegExp.Pattern = "[{]contractMonth:(.+?),productCode:([A-Z0-9]+?),(.+?)settlement:([A-Z 0-9]+?)[}]"
bRes = RegExp.test(S)
If bRes Then
Set oMatches = RegExp.Execute(S)
ReDim X(1 To oMatches.Count, 1 To 2)
PZ = 0
For n = 0 To oMatches.Count - 1
If InStr(1, oMatches(n).subMatches(1), "X", vbTextCompare) = 2 Or InStr(1, oMatches(n).subMatches(1), "EC", vbTextCompare) = 1 Then
PZ = PZ + 1
X(PZ, 1) = oMatches(n).subMatches(1)
X(PZ, 2) = oMatches(n).subMatches(3)
End If
Next
End If
Parse_HTML = X
End Function
Sub load_K_exp()
'объявляем переменные
Dim sURI As String, PZ As Integer
Dim oHttp As Object
Dim htmlcode, outstr As String
Dim inpdate As Date
Dim d, m, y As Integer
Dim Arr As Variant
sURI = "http://www.cmegroup.com/trading/fx/g10/euro-fx_product_calendar_options.html"
'делаем запрос
On Error Resume Next
Set oHttp = CreateObject("MSXML2.XMLHTTP")
If Err.Number <> 0 Then
Set oHttp = CreateObject("MSXML.XMLHTTPRequest")
End If
On Error GoTo 0
If oHttp Is Nothing Then
Exit Sub
End If
oHttp.Open "GET", sURI, False
oHttp.send
'получаем HTML страницы с контрактами и извлекаем из него даты экспирации
htmlcode = oHttp.responseText
Arr = Parse_HTML(htmlcode, PZ)
Set oHttp = Nothing
[O3].Resize(PZ, UBound(Arr, 2)).Value = Arr
'IE.Quit
End Sub
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
вот что значит высший пилотаж - всегда можно обойти Redim стороной ... всё работает!.. буду разбираться... thanks!
p.s. Hugo, п.2 - я хотела создать новый пустой (просто Redim), а в него переложить нужные из имеющегося... без Redim Preserve - слышала, что это долго... но вот VBScript и без этого смог выразить мысль, и всего то двумя цифрами: или 1(равно) или 0(не равно)... насколько поняла... надеюсь, хоть читаю правильно..
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
JeyCi redim вещь загадочная очень и вообще перекладывать по 2м столбцам нелегко...
Это же инструмент динамического резервирования для массивов любой размерности! Даже во времена "Царя-Косаря" почти во всех языках программирования присутствовал этот инструмент.
Doober. сижу вот - разбираюсь - например такой запрос пытаюсь делать
Код
Public Function Parse_HTML(S)
S = Replace(S, Chr(34), "")
bRes = False
Set RegExp = CreateObject("VBScript.RegExp")
RegExp.Global = True
RegExp.IgnoreCase = True
RegExp.Pattern = "[{]Month:(.+?),(.+?)Settle:([A-Z 0-9]+?)[}]"
bRes = RegExp.test(S)
If bRes Then
Set oMatches = RegExp.Execute(S)
ReDim x(1 To oMatches.Count, 1 To 2)
For n = 0 To oMatches.Count - 1
x(n + 1, 1) = oMatches(n)
x(n + 1, 2) = oMatches(n).subMatches(6)
Next
End If
Parse_HTML = x
End Function
по адресу
Код
sURI = "http://www.cmegroup.com/trading/fx/realized-fx-volatilities/euro-quarterly-variance_quotes_settlements_futures.html"
776 строка html-кода (Month и Seattle) пытаюсь вытянуть столбцы... тоже массив, тоже 2 столбца, также выгружаю, как по sub вашему первому - полностью - (только в sub адрес заменила)... а макрос ругается на строку выгрузки??
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
Public Function Parse_HTML(S, PZ As Integer)
S = Replace(S, Chr(34), "")
S = Replace(S, Chr(10), "")
S = Replace(S, Chr(9), "")
S = Replace(S, Chr(32), "")
bRes = False
Set RegExp = CreateObject("VBScript.RegExp")
RegExp.Global = True
RegExp.IgnoreCase = True
RegExp.Pattern = "<tr><thscope=row>(.+?)</th><td>(.+?)</td><td>(.+?)</td><td>(.+?)</td><td>(.+?)</td>" & _
"<td>(.+?)</td><td>(.+?)</td><tdclass=(.+?)</td><tdclass(.+?)</td></tr>"
bRes = RegExp.test(S)
If bRes Then
Set oMatches = RegExp.Execute(S)
ReDim X(1 To oMatches.Count, 1 To 2)
PZ = 0
For n = 0 To oMatches.Count - 1
PZ = PZ + 1
X(PZ, 1) = oMatches(n).subMatches(0)
X(PZ, 2) = oMatches(n).subMatches(6)
Next
End If
Parse_HTML = X
End Function
Sub load_Doober()
Dim sURI As String
Dim oHttp As Object
Dim htmlcode, outstr As String
Dim inpdate As Date
Dim d, m, y As Integer
Dim Arr As Variant
sURI = http://www.cmegroup.com/trading/fx/realized-fx-volatilities/euro-quarterly-variance_quotes_settlements_futures.html
On Error Resume Next
Set oHttp = CreateObject("MSXML2.XMLHTTP")
If Err.Number <> 0 Then
Set oHttp = CreateObject("MSXML.XMLHTTPRequest")
End If
On Error GoTo 0
If oHttp Is Nothing Then
Exit Sub
End If
oHttp.Open "GET", sURI, False
oHttp.send
htmlcode = oHttp.responseText
Arr = Parse_HTML(htmlcode)
Set oHttp = Nothing
Sheets("from").[z3].Resize(UBound(Arr), UBound(Arr, 2)).Value = Arr
'IE.Quit
End Sub
ясно что ничего не ясно, кроме того что с паттернами быть поосторожнее... НО тогда с массивом ругается, что Argument is not optional в строке Arr = Parse_HTML(htmlcode) ? что ему не хватает, чтобы взять в Arr? после функции
Doober вы меня извините, конечно, но я убрала в вашей функции (PZ as Integer) - надеюсь я ничего плохого не сделала?... но на удивление у меня заработало... p.s. excel очень интересно смотрит на html через призму regexp... имхо
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
так ведь если он мне сказал, что Argument Not optional - вот и убрала его опции... ? или добавить надо было?.. он ведь, например n в первый раз и так, видимо, понимал, что тот Integer...
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
вот это дааа!! огромное спасибо всем!!!кто внёс вклад в моё понимание CreateObject("MSXML.XMLHTTPRequest") , CreateObject("VBScript.RegExp") , CreateObject("Scripting.Dictionary") ... сотворила vbscript используя код выше - при создании скрипта из данного кода , загвозда навернулась в том, что массив создаваемый REDIM'ом не понимался адекватно (никак не понимался) в скрипте - пришлось применить старые добрые Словарики... а вытянуть то хотела всего несколько циферок...не могу не поделиться - settle фьючей фунтика и еврушки (скрипт в аттаче)... хоть не надо теперь шастать но интернету, чтобы понять на каком мы свете... если дальний фьюч более дорогой чем текущий - это контанго (contango), если ближний фьюч более дорогой, чем дальний - это бэквардация (backwardation)... а дальше экономическая теория про состояния рынка...
p.s. может можно было и более кратко и более ювелирно, более циклично чем у мня получилось - но работает - и это уже замечательно! ребята успехов вам всем!.. так приятно иногда MsgBox'ами выкидывать интересные цифры, а то во всех рабочих файлах и во всём и'нете так много цифр
?? для win7 *32x может кто-нибудь подскажет, есть ли какой-нибудь специализированный софт/интерфейс, чем VBA, чтобы можно было писать и править VBscripts... так чтобы не тестить в xl, а потом адаптировать для работы без xl... софтинка какая-нибудь - в которой можно и писать и она подскажет если есть ошибка... чтобы за каждой проверкой не бегать в Блокнотик ?? или может линк на какую толковую инфо/или книгу по vbscript (если где у кого завалялся линк)... уже спасибо!
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
немножко экперимента с прежним кодом и выгрузка в txt (дополнительно) -добавлены заголовки -
Код
Public Function UseCME(URL$) As Variant
'URL$ = "http://www.cmegroup.com/trading/fx/g10/euro-fx_quotes_globex_options.html?exchange=XCME&foi=OPT&venue=G&productCd=6EH4&underlyingContract=6E&floorContractCd=ECH4&expMonth=201403&prodid="
Dim XMLHTTP 'ADOStream, filename
On Error Resume Next
Set XMLHTTP = CreateObject("Microsoft.XMLHTTP")
XMLHTTP.Open "Get", URL$, "False"
XMLHTTP.setRequestHeader "Accept-Encoding", "gzip, deflate"
XMLHTTP.setRequestHeader "user-agent", "Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko"
XMLHTTP.setRequestHeader "Accept-Language", "ru-RU,ru"
XMLHTTP.setRequestHeader "Content-Type", "text/html;charset=UTF-8"
XMLHTTP.send
If XMLHTTP.statustext = "OK" Or XMLHTTP.Status = 200 Then
Debug.Print XMLHTTP.responseText
UseCME = XMLHTTP.responseText
End If
Set XMLHTTP = Nothing
End Function
хотя html-код в файл скачать на скорую руку можно и так
Скрытый текст
Код
Function loadFile(ByVal Url$, ByVal FileTxt$) As Boolean
' Функция скачивает html-код по ссылке URL$
' и сохраняет его под именем
Dim xmlHttp, ADOStream
On Error Resume Next ': Kill FileTxt$ '???
Set xmlHttp = CreateObject("Microsoft.XMLHTTP")
With xmlHttp
.Open "GET", Url$, "False"
.send
If .statustext = "OK" Then
Set ADOStream = CreateObject("ADODB.Stream")
oADOStream.Mode = 3 '''
ADOStream.Type = 1
ADOStream.Open
ADOStream.Write .responsebody
ADOStream.SaveToFile FileTxt$, 2
ADOStream.Close
Set ADOStream = Nothing
loadFile = True
Else
MsgBox "Error: " & .statustext & .Status
End If
End With
Set xmlHttp = Nothing
End Function
Sub load()
'объявляем переменные
Dim Url$
Url$ = "http://www.cmegroup.com/trading/fx/realized-fx-volatilities/euro-quarterly-variance_quotes_settlements_futures.html"
' скачиваем html-код в файл
FileTxt = CreateObject("WScript.Shell").SpecialFolders("Desktop") & "\now_" & Format(Date, "DD.MM.YYYY") & ".txt"
loadFile Url$, FileTxt
' открываем скачанный файл
CreateObject("wscript.shell").Run FileTxt
End Sub
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
ВВИДУ СКОРОГО ДНЯ РОЖДЕНИЯ ЭТОЙ ВЕТКИ - ВОЗОБНОВЛЮ ЧУТЬ-ЧУТЬ... (чтобы было понятно, что ничто не вечно, когда источник меняет структуру исходных данных) на примере линка - та же история - нужны все Даты Экспирации - просто другой торговый инструмент (евру и фунтика за эти годы потиху причёсывала, на сип посматривала редко - хотя там всё по аналогии "чтобы взять с сайта" и было и есть и, наверно, будет) *** и вот самое интересное с того (указанного линка) запрос на: http://www.cmegroup.com/trading/equity-index/us-index/e-mini-sandp500_product_calendar_options.html регулярка: "<tr><thscope=row>(.+?)</td><td>(.+?)</td><td>(.+?)<br/>(.+?)</td><td>(.+?)</td>" - позволяет взять только 1 тип контрактов, как бы выбраннный в выпадающем списке по умолчанию...
138
American Options
136
End of Month Options
8292
Weekly Monday Option
2915
Weekly Options
8227
Weekly Wednesday Option
таблица (выявлено по option выпадающего списка)
добавление к строке запроса ID-тикера - например, #optionProductId=138 - не показывает иной контракт... хотя выбор иного контракта в выпадающем списке - в строке адреса в браузере пропечатывает этот довесок в дополнение адреса...
появился вопрос: КАК взять все даты экспирации Сипа (по прошествии нескольких лет)
ответ нашёлся лишь в начале этого поста: т.к. евру и фунтика все эти годы причёсывали по рабочему коду - просто попробовать сделать по аналогии... взглянув, а что же там, прищлось констатировать, что там по какой-то причине пришлось переехать на новые рельсы - парсинг JSON... (давно, уже не помню почему)...
протестирован код (привожу отрывок, поскольку вычленять лишь его из всего проекта ооочень долго, а примеры работы с JsonBag на сайте есть)
Код
' ... начало как обычно для MSXMLHTTP примерно, как в этой ветке...
S = htmlcode
Parse_HTML_OexpS = Split(Split(S, "component.options =")(1), ";")(0)
'создаём объект JsonBag
Set Js = New JsonBag
'в него текстовую строку json_файла
Js.JSON = S'парсинг JSON-структуры с помощью ClassModule JsonBag
- всё работает!..
ВОПРОС: почему в Fiddler'e не вижу и намёка на тот JSON ???
остальные вопросы: также не понятно, как бы парсила с нуля эту ситуацию для взятия дат экспирации всех/нескольких - по задаче ветки... (если бы не было готового кода по евре и фунтику)... может ли быть такое, что "то ли Fiddler что-то не то показывает"? "то ли сайт-источник вообще не показывает, что надо"? даже боюсь предположить, что это может быть связано с местоположением IP юзера (т.е. меня)...
вобщем странности какие-то... как из кода этой вэб-страницы увидеть как взять все даты экспирации (задача ведь по сути не изменилась), не включая браузер (чтобы не прыгать по выпадающему списку программно)? для меня загадка (когда я смотрю html-код уже сейчас)... если есть идеи алгоритма без включения браузера и прыгания по выпадающему списку... - заранее спасибо ... иначе пусть этот пост останется для инфо "не всё можно увидеть в Fiddler't и html-коде" - страшный вывод
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
Doober написал: Не то, без выполнения серверных скриптов ничего не выйдет.
это что они (сам сайт) защиту какую-то поставили? (чтобы не отследить траффик из Fiddler'а или ему подобных)? сервер-то не мой или эти скрипты как-то можно c моего компа прогнать? и на каком языке и где покопать, не подскажете?
Скрытый текст
чёртов блок питания свистит/шумит... за пол-года всё нормальный новый(!) никак не удаётся найти... уже несколько раз меняла... сложно работать... вот зачем продавать такое......... просто сил уже нет бегать по городу и у таких продавцов что-то покупать (уже 3-и такую подставу сделали (а бп 4-й) - как таким вообще лицензию на торговлю дают)... ломают всю работу... ломают всю жизнь... Doober, простите, что не сразу отвечаю - просто технически... не могу собраться с мыслями и понять, то ли блок питания отвлекает, то ли вопрос, действительно, не понять с какого бока подходить, то ли что-то упускаю из-за невозможности качественно сосредоточиться... в придачу, спину скрутило(просквозило)... простите за задержку ответа... но до дня рождения ветки, действительно, ещё время есть - просто пытаюсь вычленить эту проблему из проекта, ещё и вспомнить что же ж я там имела ввиду... и вот этот момент меня очень насторожил в Fiddler'e - ещё не сталкивалась ранее.. да и рабочие условия адские (обидно, что покупаешь новый блок питания, а работает не лучше, чем старый, а старого уже нет - по вине одного из этих "продавцов" - мечтаю, решить этот вопрос чисто по-Экологически - т.е. вернуть им, чтобы сами разбирались со своими поставщиками, а последние пусть сами утилизируют эту кучу металлолома, вместо того чтобы сгружать это в нашу страну под видом нового технически годного для эксплуатации товара, который по сути только на свалку)... или мечтаю, пусть бы сами такие продавцы работали на том, что продают... всё-таки в душе я до сих пор эколог (как была по диплому alma-mater) - не возможно в таком environment'e жить и работать... - это было предупреждение тем продавцам интернет-магазинов, проверяли бы они это на себе.....
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
Doober, спасибо!.. тоже делала через JsonBag (просто по аналогии с тем что работало у меня с еврой) - но в упор не могу разглядеть эти Json-файлы в Fiddler, чтобы распарсить с нуля (если бы у меня не было отработки по евре)... боюсь, что и до других json-ов могут возникнуть проблемы добраться - поэтому ребром и встал вопрос "Упс, приплыли" и "что делать"... хотела знать что в таких ситуациях делается, чтобы увидеть такие json'ы воочию...? (не поняла) У меня было как-то так (с прежних времён)
Код
Js.JSON = S
'достаём объекты и (переменные) названия КК ВСЕ 30.09.2016
ii = 1
Count% = Js.Count '("label").Count + 1
'собираем словарь массивов
Set d = CreateObject("Scripting.Dictionary")
With d
.comparemode = 1
Do While ii <= Count%
n_l = Js.Item(ii).Item("label") 'label
n_n = Js.Item(ii).Item("name") 'name
n_id = Js.Item(ii).Item("productId") 'productId
If Not .Exists(n_l) Then .Add n_l, X()
Set bagN = Js.Item(ii).Item("calendarEntries") 'объект calendarEntries
ReDim X(1 To bagN.Count, 1 To 2)
For m = 1 To bagN.Count '+ 1
'x(m, 3) = bagN.Item(m).Item(1) 'contractMonth
X(m, 1) = bagN.Item(m).Item(2) 'productCode
X(m, 2) = bagN.Item(m).Item(4) 'lastTrade
Next m
.Item(n_l) = X
Erase X
Set bagN = Nothing
ii = ii + 1
Loop
End With
'выгрузка массивов из словаря
With Workbooks.Add.Sheets(1)
.Columns(2).NumberFormat = "@"
i = 0
For Each kk In d.keys
lr = .Cells(.Rows.Count, "A").End(xlUp).Row
i = lr + 1
b = d.Item(kk)
.Cells(i, 1).Resize(UBound(b, 1), UBound(b, 2)) = b
Erase b
Next
.Cells.EntireColumn.AutoFit
End With
также у меня ваш код почему-то отрабатывает только с закомментированными (иначе Subscript out of range) заголовками:
- примерно такую же проблему вскрыла на днях и в своём коде?? (просто сменив создание объекта MSXML2.XMLHTTP на создание объекта CreateObject("WinHttp.WinHttpRequest.5.1") - только тогда поняла, что чем-то не нравятся эти 2 заголовка [раньше работало, вдруг перестало], проверила, не поняла, закомментировала, пошло работать, вернула MSXML2.XMLHTTP... сама в замешательстве была?... думала, блок питания мешает понять а с таким заголовком ещё даже не встречалась нигде:
Upgrade-Insecure-Resources помогли с доступом OriginA ... Один из HTML ресурсов теперь не содержит смешанного контента потому, что протоколы были незаметно подменены и удалённые зависимости стали доступны через https. Этот пример показывает почему множество сайтов неохотно предоставляют собственный контент через https, во избежание пугающих сообщений об ошибках и дефектов функциональности. Это ведёт к печальному обстоятельству, что наименее ответственные участники на конце цепочки зависимостей могут тормозить прогресс. Циклические зависимости(так как они точно существуют в огромной структуре веба) могут создавать взаимные блокировки, которые не разрешить без координации действий.
Doober вы это через Mozilla увидели?? или в traffic'е в Fiddler надо разглядеть какой-то особый js? (и к нему такой заголовок??).. просто в упор не вижу (может ещё не во всех тонкостях разобрлась)
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
и модуль класса JsonBag у меня, видимо, подсокращённый был... не все методы прописаны - ToArray2 отсутствовал... мой код в #26 под модуль класса, приложенный к этому посту
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
JeyCi написал: а где ваша чуйка увидела сами json-данные?
да, наверно, это, действительно была чуйка... которая увидела структуру: {{замеченного линка}} - предыдущего поста..... и распарсила её (С ДОПОЛНЕНИЕМ в Модуль Класса функции-метода ToArray2), как:
Код
x = JS.ToArray2
For n = 1 To UBound(x)
HD = x(n)
sh.Cells(1 + n, 1).Resize(1, UBound(HD, 2) - 1) = HD
Next
Doober, спасибо... это был очень скользкий момент... а вы увидели возможность всё это добро взять в массив и разложить по ячейкам... такое умение, действительно, только с опытом можно приобрести... буду иметь ввиду... спасибо за опыт! (жизненный ) P.S. а почему клиент перестал понимать заголовки Accept и спотыкаться об них начал у меня - так и не поняла... у меня, наверно, ещё 11 дней до дня рождения ветки
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)