Пользователь
2,4
рейтинг
22 июля 2013 в 12:08

Разработка → Работа с API Яндекс.Метрика на Python из песочницы

Всем любителям Python и Яндекс.Метрики доброго дня!

Некоторые знают, что с некоторых пор я заделался Web-разработчиком, впрочем это громко сказано. Мой сайт с занимательными задачками, кстати, если кому интересно, попасть туда можно вот по этой ссылке, медленно, но верно, катится в топы поисковиков, благо альтернатив не так много. О посещаемости на сайте я узнаю из отчетов уже полюбившейся мне яндекс.метрики. В принципе, там есть большинство из того, что мне нужно. Но каждый раз ходить на из сайт для того, чтобы посмотреть количество визитеров как-то не фонтан. И вот тут я снова, как нельзя кстати, вспомнил, что в общем-то я программист и учу питон. «Ладно», — подумал я — «заодно и в работе с сетью попрактикуюсь». Сказано-сделано. Через протокол oAuth регистрируем приложение и получаем для него отладочный токен (живет он бессрочно и каждый раз запрашивать его не надо. Так что под наши нужды — самое то!). Для всех интересующихся, под катом привожу код библиотеки, которую можно привязать к любому GUI — интерфейсу:

YMReader.py

А теперь, кратко, что она все-таки умеет.

  • Авторизовываться в яндекс.метрике, используя ID и токен
  • Запрашивать список счетчиков для аккаунта (используется в дальнейшем)
  • Получать статистику за сегодняшний день или за все время работы (Today или Totall в параметре соответствующей функции)
  • Получать список поисковых фраз, по которым люди переходили на ваш сайт
  • Проверять правильность установки счетчика

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

import YMReader

 Затем передать ей данные для входа методом SetLoginData в параметрах указав ваш ID и ваш токен. Как вы получите токен — ваше дело, но я решил использовать статичный отладочный (должно же быть хоть что-то через жопу)
Например вот так:

SetLoginData("21535707","49985f415a9a46aab45b70304a557cab") #  в данных изменена пара символов, поэтому при попытке воспользоваться - вернет 403 или 401 ошибку

Ну а теперь, можно пользоваться всеми функциями. Наберите print dir(YMReader), чтобы увидеть, как они называются. Как правило, функции у меня возвращают данные либо в виде словарей (например GetSummary) либо в виде строки (CheckCode). Поэтому, чтобы воспользоваться результатами ничего парсить не требуется. Давайте, для примера, выведем число посетителей для сайта ru-brains.org:
 
import YMReader

YMReader.SetLoginData("21535707","49985f415a9a46aab45b70304a557cab")

print YMReader.GetSummary((YMReader.GetCounters()[1]["URL"]))["Visitors"]

Как видите, все просто!
Либа распространяется под лицензией GPL — так что пользуйтесь сколько хотите!
Всем удачи и безглючного кода!
Максим Граков @GrakovNe
карма
21,0
рейтинг 2,4
Пользователь
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое Разработка

Комментарии (7)

  • +3
    Несколько пожеланий, если хотите чтобы проект не был забыт на этой статье:

    — Оформите код по PEP-008;
    — Используйте Sphix для генерации документации вместо dir(...);
    — Выложите код на github, bitbucket, whatever, раз open source;
    — Зарегистрируйте пакет на PyPi (документацию там же можно хостить).

    В текущем виде ничего кроме желания «переписать» оно не вызывает.

    • 0
      Добавлю: переписать в виде класса, никакие global здесь не нужны. Если там используется XML, возможно lxml или xml.dom из стандартной библиотеки сделали бы код чище?
    • 0
      Спасибо, учту!
  • 0
    Хотел бы использовать Ваш код для входа в Yandex.API где-то можно посмотреть код?
    Что думаете о реализации отличного от Python языка что-то вроде на PHP или Java?
    • 0
      Все исходники выше по ссылке. Немного «очеловеченная» версия в виде класса есть на GitHub. Про реализацию на других языках как-то не задумывался
  • 0
    а это не пробовал? pypi.python.org/pypi/yametrikapy/1.0
    • 0
      Своевременно

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.