0,0
рейтинг
14 ноября 2010 в 21:58

Экспорт дней рождения из ВКонтакте (работа с OpenAPI)

imageЛично я не любитель соцсетей, а в особенности — вконтакте, из-за которого у меня было немало времени, потраченного впустую. Собственно поэтому в свое время я решил из него удалиться. Но в определенный момент я понял, что контакт служил не только местом , где можно было с утра до ночи нажимать F5 на странице Новостей для общения, но также сервисом, благодаря которому я мог вовремя узнавать о днях рождения друзей и, таким образом, поддерживать с ними хорошие отношения.

Таким образом, была поставлена задача: экспорт календаря в внешний сервис (в моем случае — Google Calendar). Используется родной API, поэтому все работает быстро и без багов. Кому интересно — прошу под кат.

Итак, были рассмотрены следующие варианты:

Вариант в лоб — написать скрипт, который собирает ответы на AJAX-запросы страницы календаря. В общем, обход проблем с безопасностью, полчаса над Firebug-овскими ответами сервера, создание php-шки — и получился файлик с форматированными HTML-блоками, с которого к тому же надо вычислять год рождения от возраста в скобках, ну и конечно же, даже HTML «не особо» валидный. Вариант отпал. Дальше пошла работа, и времени+желания искать другие варианты не было.

Вскоре на Хабре появилась статья «Экспорт Дней рождения из вКонтакте в Google Calendar», которая предлагала аналогичное решение, только в виде юзерскрипта, причем с впихнутым внутрь jQuery. Ну ладно, подумал я, то что тормозит — не очень страшно, главное — работает. К сожалению, обнаружилась пара неприятных багов (в т.ч. проблемы с спецсимволами в именах, ограничение в одного человека на день) и этот вариант тоже отпал.

Вчера же от нежелания делать что-либо полезное нечего делать решил вернуться к вопросу. Так как на этот момент у контакта уже есть более-менее нормальное API для внешних сайтов и js-приложений (OpenAPI), было решено использовать его. Пара часов разбирательств, сожаление, что нет аналога FQL или соцграфа, далее разборка с форматом iCalendar — и, таким образом, был создан простейший в плане кода и дизайна HTML-файл и контактовское приложение (дабы не нагружать сервер), которые позволяют получить ics-файл для последующего импорта в любую популярную программу-календарь.

Ознакомиться и скачать «страничку» можно здесь: http://pastebin.com/Q4dwGQyL
Если лень создавать свое приложение вконтакте и хотите просто воспользоваться готовым решением, можете попробовать здесь: http://rreverser.com/dev/vkcal.htm (предупреждаю, хостинг бесплатный, так что может не выдержать знаменитого эффекта).

Способ использования:
  • Нажимаете кнопку логина вконтакте
  • Разрешаете доступ
  • Ждете до появления кода в textarea
  • Нажимаете одну из кнопок «Save...» либо сохраняете полученный код в ICS-файл вручную
  • Импортируете сохраненный файл в календарь (Google Calendar, Outlook, etc.)
Спасибо, пока все.

Примечание: скрипт написан моим другом RReverser.
Сергей Гончаренко @justpusher
карма
27,0
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

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

Самое читаемое

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

  • –2
    захожу на указанный сайт, логинюсь, жмакаю на батон Save и ничего :(
    браузер Chrome 7.0.517.44
    • 0
      *сам не пробовал* может блокируются pop-up'ы, а экспорт идет как раз через pop-up?
    • +7
      А в ботнете стало на одного зомби больше.
    • 0
      Хром не хочет через data-URI скачку делать, поэтому из него придется сохранять вручную.
    • 0
      С аналогичной версией браузера всё ок, даже при 1500 друзьях.
      • 0
        Ну тогда хорошо. Хотя у меня канарейка и правда не хочет.
  • 0
    iCal can’t read this calendar file. No events have been added to your iCal calendar.
    :(
    • +1
      Тестил в гугл-календаре, все шло на ура. Код хоть вывелся? Что за прога?
      • 0
        Нажал Save, переименовал в .ics и открыл в айкал. сохранил вручную и все нормально пошло.
        • 0
          А проблем с кодировкой символов в iCal не было?
          • 0
            да, кириллица некорректно импротировалась
          • 0
            Решается конвертированием в UTF-8. У меня по умолчанию 1251 было.
            • 0
              А каким образом конвертировал?
              • 0
                открыл в Notepad++ и выбрал UTF-8 без BOM
  • –7
    >> статья написана не мной, а моим другом с адресом RReverser@gmail.com, которому не помешал бы инвайт.
    Вы наверное забыли недавнее послание хабраголоса: опубликовал чужую статью — потерял аккаунт
  • +1
    Огромное спасибо!!! Это находка для меня.
  • 0
    я в коментах к вышеупомянутой статье про экспорт уже писал что есть еще перловый скрипт
    писал давно… для себя… и недавно обнаружил баг, исправление коммитить лень)
    code.google.com/p/gangsta-geek/source/browse/#svn/trunk
    • 0
      кстати ему уже два года)
    • 0
      Да, его я тоже тогда пробовал. Баги аналогичные яваскриптовому) Поэтому и создал решение на чистом OpenAPI.
      • 0
        > ограничение в одного человека на день
        ага… замена в транке не появившаяся))
        <div class='calPic' id='([^>]*?)pic\d+' (?:style=\'display:none\')?>

  • +1
    Теперь в Новостях AJAX, можете возвращаться.
    • –1
      Извините, вы это к чему?
      • +1
        К первому зачеркнутому. Или это читать не надо было?
        • –1
          Новости здесь вообще ни при чем. И я как раз писал, что календарь использовал AJAX, но с ним были проблемы.
  • 0
    Только сегодня искал подобный скрипт, спасибо! Проблема — в файле и при импорте в outlook все имена вида «8<>E0, что делаю не так?
    • +1
      Кнопка сохранения — чисто экспериментальная, могут быть проблемы. Лучше, конечно, сохранять вручную.
      А какой браузер, если не секрет?
      • 0
        вручную такая же борода
        браузер: сафари
        импорт календаря в гуглкалендарь через оперу.

        и, да, в опере у меня вообще нету никакой реакции после логина

        • 0
          Странно. У меня как раз Опера, на ней в основном тестил. Все работает как часы.
          В Хроме тоже. Даже в ИЕ9.
          В сафари не пробовал.
      • 0
        Опера. Вручную все в порядке, не додумался сразу проверить. Спасибо еще раз :)
    • 0
      У Вас проблемы с кодировкой. Откройте полученный файл в редакторе и принудительно укажите кодировку UTF-8.
      • 0
        ага, тока первые буквы имён это уже не вернёт
        • 0
          Почему это не вернет? Всё нормально конвертируется.
          • 0
            ну у меня первые буковки имён «побиты»
  • 0
    Добавил кнопочку для server-side сохранения (если экспериментальная не работает).
  • +1
    хм… я ж надеюс этот скрипт не парсит ДР кого-то из вконтакте на день раньше как вконтакт любит показывать.
    А то ситуациая типа
    — С днюхой тебя!
    — Так у меня ж завтра
    — Ой,… тогда с наступающим тебя!
    уже достают.
    • 0
      Это, кажется, приколы с разницей часовых поясов. Контакт не обрабатывает нормально часовой пояс.
  • 0
    говноконтакт — зло!

    если там ещё и фио светится де факто распространение персональных данных!

    с нетерпение жду 1 января 2011 года =)
    www.rg.ru/2006/07/29/personaljnye-dannye-dok.html
    • 0
      С общим выражением согласен, но не с аргументом. Светится только то, что ты сам указал. Хочешь — укажи что-то левое, и все. А то, что они против — тебя беспокоить не должно. Меня по крайней мере совесть не мучает=)
  • +7
    «Контакт — зло, но чтобы получать из него дни рождения я написал скрипт, чтобы скачивать музыку я написал скрипт, чтобы добавить фотки к контактам в телефон, я написал скрипт, чтобы задать вопрос гоблину, я скачал приложение на андроид и через него написал гоблину.»

    Господа, вам не надоело?
    Если вы не умеете управлять своим временем и не можете пройти мимо игры Счастливый фермер — это ваша проблема.

    Скрипт действительно полезный, но неужели нельзя было воздержаться от критики этой социальной сети?

    Заметьте, только благодаря Контакту у вас есть, где спарсить дни рождения.
    • 0
      «Заметьте, только благодаря Контакту у вас есть, где спарсить дни рождения.»

      Не совсем. Это связано лишь с тем, что продолжительный час общался только через него. Если б сразу все дела и отношения вел через скайп/джабер/icq — было бы сейчас все отлично.

      Но раз уж был какой-то сервис, которым раньше пользовался (не обязательно контакт, вообще), то уходить надо, ничего не теряя — ни контактов, ни музыки, ни фоток=)
    • 0
      «Заметьте, только благодаря Контакту у вас есть, где спарсить дни рождения.» дни рождения и без говноконтактов помню. Мама пожилая, по этому записывает в блокноте =) Если я и забуду кого, я у неё спрошу.
  • 0
    Обработано 0 мероприятий.
    Не удалось импортировать мероприятия: Загруженный файл пуст.
    • +1
      Как загружали? Вы хоть залогигились сперва через кнопочку или пустой textarea сохраняли?
      • 0
        Логинился. Код видел. Пробовал обе кнопки под ним.
        • 0
          Обе не работают? Или только экспериментальная?
          В крайнем случае, выберите самый надежный способ — сохранение вручную. Проблем во всех случаях избежать невозможно.
  • 0
    Слегка переделав скрипт — можно получить свои контакты в VCARD.
    Тогда, при импорте и объединении контактов, можно получить напоминания о днях рождения в календаре, любезно заготовленном Google.
    Такой вариант оказался для меня более удобным, т.к. часть контактов уже имела в свойствах дни рождения
    • 0
      Возможно. Но большинству, думаю, все же удобнее импортировать все дни рождения разом. Вдруг что — удалить отдельные не проблема. А вот импортировать в тот же Google Calendar VCARD-ы уже не так просто.
      В конце-концов, скрипт писался RReverser-ом для личного пользования, и уже потом был выложен на публику:)
      • 0
        Vcard нужно загрузить в гмайл, а google автоматом вытянет все дни рождения контактов в календарь.
        Возможно, так действительно было бы удобнее.
        • 0
          Возможно. Если будут пожелания — сделаю так. Вообще, был бы нормальный хостинг, можно было бы и аналог OpenGraph сделать (не по визуальным фишкам, а чисто по удобству доступа к API).
  • 0
    • 0
      Вы опять осилили только заголовок статьи?
      • 0
        «Опять» это не ко мне.
        Я не уверен, что это тоже самое. Не трогайте меня, я дизайнер))
  • 0
    Контакты импортировались. На полноту данные не проверял.
    Но, корректно отображаются только контакты на латинице, русский язык представляется из себя иероглифы. Например, "Àëåêñàíäð Öûãàíîâ".
    • 0
      Извините, выше не заметил, что надо перекодировать в UTF.
      Все нормально теперь отображается.
  • –1
    а что вместо русских буков — крякозябры?????
  • 0
    Идея интересная, мне лично хочется попробовать настроить такое на своем хостинге.
    Подскажите пожалуйста, страничку html я создал, но там кнопка вкотакте не активная, я понял, что нужно создать свое приложение или куда то надо подставить свои ключи… можно тут поподробней.
    В заранее спасибо
    • 0
      Нужно создать сайт-приложение вконтакте ( vkontakte.ru/apps.php?act=add&site=1 ), настроить его на свой сайт, скопировать с вкладки «Настройки» код приложения и вставить вместо APP_ID.
    • 0
      Кстати, страницу возьмите из новой ссылки pastebin-а, там уже кое-что исправлено.
  • 0
    Не знаю, я в валидности, техничности и прочих професионально-специальных аспектах решения данной задачи не шарю, а просто хочу сказать огромное человеческое спасибо!
  • 0
    Спасибо! Отлично работает!!!
    Жду когда появится у VkontakteSync для android…
  • 0
    А нет желания, раз уж вы разбирались с API контакта и гугла, сделать кнопочку загрузки фоток вконтактик из Picasa?
    • 0
      Как-то не очень) К тому же, аплоудинг через API не получится, только «в лоб».
  • 0
    Все получилось, спасибо!
    Еще бы как то теперь контакты из вконтакта в гуглоконтакты (тавтология какая-то:) )
    • 0
      Скоро будет. Уже есть возможность, есть запросы, осталось найти время)
  • 0
    Кто-нибудь может помочь собрать адреса ЖЖ френдов из поля «веб-сайт»?
    Френдов много, вручную всех перепроверять нет возможности.
    • 0
      Все за отдельную плату)
      • 0
        Эх, придётся самому тогда. Думал есть какие-то готовые решения
  • 0
    Не получилось импортировать все дни рождения, какая-то часть не добавилась=\ Файл конечный весит 60,9кб, и если сохранять кнопкой save — сохраняется с расширением *.ics.part, вручную объем файла остается таким же.
  • 0
    Прошу прощения, так как топик создавался еще не от моего аккаунта — не могу исправить адрес. Дело в том, что я перенес рабочую демку вместе с блогом, и теперь ее можно найти по адресу http://rreverser.com/dev/vkcal.htm.

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