Что нового

Данные, строки Получение данных с двух сайтов одновременно

FrecKDancE

Новичок
Сообщения
19
Репутация
1
Всем привет. Имеется 2 сайта с данными. Пытаюсь сделать так:
1) получаю необходимые данные с первого сайта (название и персональный ID)
2) после получения первого названия, его необходимо найти на втором и сайте и от туда вытащить его цену

Работа с одним сайтом происходит как надо, но не выходит найти эти данные на втором.
Строка с первого сайта выглядит так:
Код:
{"item_id":"3025153899","assetid":"25627827440","classid":"4566757281","instanceid":"188530139","real_instance":"188530139","market_hash_name":"Sticker | Kitted Out","position":0,"price":7.97,"currency":"RUB","status":"7","live_time":null,"left":0,"botid":"1302730201"}
Строка со второго сайта так:
Код:
{"name":"Sticker | Kitted Out","price":6,"have":5,"max":8,"rate":90,"tr":1,"res":0}
Код:
case $Button45
            $http10 = $http1&$apikey ;Сайт 1
            $http20 = BinaryToString(InetRead($http10,4));Сайт 1
            $http20_1 = BinaryToString(InetRead($http8,4));Сайт2
            $aItems = StringRegExp($http20, '(?:"classid|market_hash_name)":"?([^"]+)', 3);Сайт 1
            $aItems_1 = StringRegExp($http20_1, '(?:"name|price)":"?([^,"]+)', 3);Сайт 2
            $iItems = UBound($aItems);Сайт1
            $iItems_1 = UBound($aItems_1);Сайт2
               For $i = 0 To $iItems - 1 Step 2 ;Сайт 1
               $classid = $aItems[$i]
               $hash_name = (($i + 1 < $iItems) ? $aItems[$i + 1] : '')
                ConsoleWrite($hash_name&@tab&$classid&@CRLF)
                    for $i_1 = 0 To $iItems_1 - 1 Step 2 ;Сайт 2
                        $name = $aItems_1[$i_1]
                        $price = (($i_1 + 1 < $iItems_1) ? $aItems_1[$i_1 + 1] : '')
                                $str = StringRegExp($http20_1,$hash_name,3)
                        ConsoleWrite($name&@tab&$price&@tab&$str&@CRLF)
                        endif
                    next
next
 
Последнее редактирование:

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
Во-первых, $str - это массив и для вывода в консоль нужно указать $str[0].
Во-вторых, $hash_name содержит строку "Sticker | Kitted Out", что для регулярки является "ИЛИ". То есть символ "|" нужно экранировать "\|".
В-третьих, всегда прикладывайте рабочие примеры. Чтобы помочь - нужно запустить скрипт и понять, что происходит. Дорабатывать ваши куски кода - то ещё удовольствие.
Код:
$http20 = '{"item_id":"3025153899","assetid":"25627827440","classid":"4566757281","instanceid":"188530139","real_instance":"188530139","market_hash_name":"Sticker | Kitted Out","position":0,"price":7.97,"currency":"RUB","status":"7","live_time":null,"left":0,"botid":"1302730201"}'
$http20_1 = '{"name":"Sticker | Kitted Out","price":6,"have":5,"max":8,"rate":90,"tr":1,"res":0}'
$aItems = StringRegExp($http20, '(?:"classid|market_hash_name)":"?([^"]+)', 3);Сайт 1
$aItems_1 = StringRegExp($http20_1, '(?:"name|price)":"?([^,"]+)', 3);Сайт 2
$iItems = UBound($aItems);Сайт1
$iItems_1 = UBound($aItems_1);Сайт2
For $i = 0 To $iItems - 1 Step 2 ;Сайт 1
    $classid = $aItems[$i]
    $hash_name = (($i + 1 < $iItems) ? $aItems[$i + 1] : '')
    ConsoleWrite($hash_name&@tab&$classid&@CRLF)
        for $i_1 = 0 To $iItems_1 - 1 Step 2 ;Сайт 2
            $name = $aItems_1[$i_1]
            $price = (($i_1 + 1 < $iItems_1) ? $aItems_1[$i_1 + 1] : '')
            $str = StringRegExp($http20_1,StringReplace($hash_name,"|","\|"),3) ; <=== экранирование символа
            ConsoleWrite($name&@tab&$price&@tab&$str[0]&@CRLF) ; <=== указание элемента массива
        next
next
 
Автор
F

FrecKDancE

Новичок
Сообщения
19
Репутация
1
Во-первых, $str - это массив и для вывода в консоль нужно указать $str[0].
Во-вторых, $hash_name содержит строку "Sticker | Kitted Out", что для регулярки является "ИЛИ". То есть символ "|" нужно экранировать "\|".
В-третьих, всегда прикладывайте рабочие примеры. Чтобы помочь - нужно запустить скрипт и понять, что происходит. Дорабатывать ваши куски кода - то ещё удовольствие.
Код:
$http20 = '{"item_id":"3025153899","assetid":"25627827440","classid":"4566757281","instanceid":"188530139","real_instance":"188530139","market_hash_name":"Sticker | Kitted Out","position":0,"price":7.97,"currency":"RUB","status":"7","live_time":null,"left":0,"botid":"1302730201"}'
$http20_1 = '{"name":"Sticker | Kitted Out","price":6,"have":5,"max":8,"rate":90,"tr":1,"res":0}'
$aItems = StringRegExp($http20, '(?:"classid|market_hash_name)":"?([^"]+)', 3);Сайт 1
$aItems_1 = StringRegExp($http20_1, '(?:"name|price)":"?([^,"]+)', 3);Сайт 2
$iItems = UBound($aItems);Сайт1
$iItems_1 = UBound($aItems_1);Сайт2
For $i = 0 To $iItems - 1 Step 2 ;Сайт 1
    $classid = $aItems[$i]
    $hash_name = (($i + 1 < $iItems) ? $aItems[$i + 1] : '')
    ConsoleWrite($hash_name&@tab&$classid&@CRLF)
        for $i_1 = 0 To $iItems_1 - 1 Step 2 ;Сайт 2
            $name = $aItems_1[$i_1]
            $price = (($i_1 + 1 < $iItems_1) ? $aItems_1[$i_1 + 1] : '')
            $str = StringRegExp($http20_1,StringReplace($hash_name,"|","\|"),3) ; <=== экранирование символа
            ConsoleWrite($name&@tab&$price&@tab&$str[0]&@CRLF) ; <=== указание элемента массива
        next
next
Конечно, это не является решением, но всё равно спасибо за подсказку. В целом вопрос решил и больше не актуально.
 
Верх