2015-11-13

Custom Search Engine + Python

Использование Custom Search Engine API от Google из Python мне показалось несколько запутанным, поэтому опишу это пошагово, возможно кому-нибудь пригодится. Для начала, нам понадобится библиотека API Client Library for Python, установить которую не представляет труда:


sudo pip install --upgrade google-api-python-client

Во вторых, нам будет нужен идентификатор CSE, который мы для себя создадим на официальной странице. Добавьте в список сайтов для поиска "google.com", а переключатель "Поиск изображений" установите в положение ВКЛ. После того, как сохраним результаты, нажатие кнопки "Идентификатор поисковой системы" покажет нам то, для чего мы прошли все эти мытарства. Это будет похоже на "01345678901234567890:qwer23tyu_i".

Теперь отправляемся в консоль разработчика, а именно в раздел "APIs & auth/APIs". Найдите в списке "Custom Search API" и подключите его.

Там же в консоли переходим в пункт "Credentials", жмем "Add credntials", выбираем "API Key", затем жмем "Server key", даем ему имя и сохраняем. Забираем ключик, он будет похож на "QWerTyQWerTyQWe-QWerTyQWerTyQWerTyQWerTy".

На этом с ключами всё, пишем код на Python. В примере мы получаем все уникальные изображения пляжа, которые может позволить этот API:


from apiclient.discovery import build

service = build('customsearch', 'v1', developerKey="QWerTyQWerTyQWe-QWerTyQWerTyQWerTyQWerTy")

start = 1

while True:

    res = service.cse().list(
        q='beach',
        cx='01345678901234567890:qwer23tyu_i',
        fileType="png,jpg",  # bmp, gif, png, jpg, svg, pdf, ...
        imgColorType="color",  # mono, gray, color
        imgSize="medium",  # icon, small, medium, large, xlarge, xxlarge, huge
        imgType="photo",  # clipart, face, lineart, news, photo
        safe="high",  # high, medium, off
        searchType="image",
        start=start
    ).execute()

    for img in res["items"]:
        print(img["link"])

    if "nextPage" not in res["queries"]:
        break

    start = res["queries"]["nextPage"][0]["startIndex"]

Комментариев нет: