Hobbycity Drop Ship API (нестандартное применение)

есть на хоббисити такая штука как Drop Ship API, предназначена в основном для спекулянтов реселлеров, которые не хотят светить своим покупателям источники. позволяет обратившись по специальному адресу вытащить наличие, цену, вес и название продукта.

идея такова, на запрос видаwww.hobbyking.com/hobbyking_api.asp?id=8731&switch… сервер вернет цену для товара 8731.
возможные значения switch:
1 - Stock Level
2 - Shipping Weight
3 - Cost
4 - Product Description
(цены указаны безо всяких скидок)

ХС предлагает воспользоваться AJAX на своей веб-страничке, однако большинство браузеров запрещают кроссдоменные запросы. как ни странно, но Internet Explorer единственный, в котором работает предложенный метод.

мне же понадобилось переодически мониторить ряд продуктов, но поднимать локальный вебсервер или вешать на имеющиеся было лениво, поэтому набросал простенький скрипт, который запускается по планировщику и складывает результаты в файлик. далее это дело парсится и складывается в БД, но это уже другая история.

так как скрипты на bash-е я думаю мало кого заинтересуют, то вот адаптация реализованная в bat-файле. для работы потребуется утилита curl, страница закачки. из архива извлечь экзешник, рядом создать bat-файл следующего содержания:

@echo off
setlocal enabledelayedexpansion

set id=6518 6306 7636 7635 9942 8932 8934 9394 10383 10279 7363 9317 9318 7314 7365 9612 7294 7468 9261 9462 10281
set str=
set url=
set cur=

echo.>"%TEMP%\~.ddf"
makecab /D RptFileName="%TEMP%\~.rpt"  /D InfFileName="%TEMP%\~.inf" -f "%TEMP%\~.ddf">nul
for /f "tokens=4,5,6,7" %%a in ('type "%TEMP%\~.rpt"') do (
	if not defined cur set cur=%%d_%%a_%%b_%%c
)
set cur=%cur::=-%
set cur=%cur:~0,-3%
echo %cur%
echo id;stock;weight;cost;description > %~dp0%cur%.csv

for %%j in (%id%) do (
	for /l %%i in (1,1,4) do	(
		set url=""
		title id=%%j, step %%i of 4
		for /f "usebackq delims=" %%a in (`curl -s !url!%%i`) do (
			if "."!str! == "." (set str=%%j;%%a) else (set str=!str!;%%a)
		)
	)
	echo !str!
	echo !str! >> %~dp0%cur%.csv
	set str=
)

title finished.
del /q "%TEMP%\~.*"
goto eof

:eof

третья строка - это перечисление id интересующих товаров. взять их можно, например, из ссылки на товар:
www.hobbycity.com/hobbycity/…/uh_viewItem.asp?idPr…

после запуска скрипт пробегается по всем запрошенным товарам, выводит на экран и в .csv файл (имя файла - дата и время запуска) примерно такое содержание:

id;stock;weight;cost;description
6518;283;197;12.29;ZIPPY Flightmax 2200mAh 3S1P 15C
6306;2591;197;10.99;ZIPPY Flightmax 2200mAh 3S1P 20C
7636;5846;215;16.95;ZIPPY Flightmax 2200mAh 3S1P 25C

я ради интереса отслеживаю таким образом цены и популярность интересующих товаров. вы же можете придумать что с этим делать еще ;)

  • 3069
Comments
vitkor

Есть желание посмотреть скриптик на bash. Покажите?

HikeR

собственно вот, два цикла, никаких изысков:

#!/bin/sh -e

ID="6518 6306 7636 7635"

NUM="1 2 3 4"
STR=""
for id in $ID
do
    for num in $NUM
    do
        URL=""
        if [ $num = 1 ]
        then STR="$id;$(curl -s $URL)"
        else STR="$STR;$(curl -s $URL)"
        fi
    done
    # только вывод на экран
    echo $STR
done
vitkor

Спасибо! Надо будет себе прикрутить в cron. Напоминание по e-mail у Хоббисетей как-то фигово работает.
А так можно будет хоть каждую минуту проверять.

HikeR

в минуту проверяется не больше 15-20 товаров. можно ускорить процесс запрашивая только количество (switch=1), то есть вместо 4-х запросов отправлять только один.

vitkor

Я собсно об этом и говорил. Интересует в основном только наличие, так как некоторые товары у них расхватывают так, что аж шуба заворачивается.
Сегодня попробую поработать над скриптом.

vitkor

Вот наковырял немного. Мне вроде удобно. Пока работает. 😃

Andrew_Stick

Спасибо!
Наваял свой вариант, с немного другой логикой 😃

Zergboy

Скажите, а кроме двух типов линков, которые на странице www.hobbyking.com/…/hobbyking_dropship.asp рассматриваются, есть еще что-то из кинговского API? И где посмотреть?
На каком-то сайте по бади-линку выдавалась цена со скидкой.