Пользователь
0,0
рейтинг
21 ноября 2009 в 14:22

Разработка → Экспорт Дней рождения из вКонтакте в Google Calendar

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



Здравствуй, уважаемое хабрасообщество!
Сегодня я хочу поделиться с тобой одним, весьма полезным, на мой взгляд, скриптом. Если вам уже всё понятно из картинки для привлечения внимания, вот линк.



Я думаю, многие здесь, как и я, имеют аккаунт в популярной социальной сети вКонтакте. Пользуетесь вы ей или нет, любите или нет, дело сугубо ваше. Однако, мне кажется, все согласятся с тем, что чем-то вКонтакте всё-же полезен. Например, я теперь знаю, когда у моих знакомых День рождения (люблю я делать приятное людям, поздравляя их с этим праздником, однако у меня совсем плохая память на даты). Не смотря на удобство размещения дней рождения в одном месте, вКонтакте явно не собирается упускать потенциальных пользователей этой функции — не предусмотрено никаких уведомлений о предстоящих событиях, то есть, чтобы наблюдать за событиями, нужно «быть вКонтакте». Это ограничение кажется весьма досадным, но для нас, программистов, повелителей информации, подобные ограничения представляют собой лишь задачу, которую интересно решить.

Вначале стоит определиться с тем, чего бы хотелось получить в результате. Для меня это было уведомление о предстоящих событиях на почту, а также, возможно, просмотр списка событий, который всегда «под рукой». Поскольку я являюсь активным пользователем сервисов гугла, то в качестве альтернативы календарю вКонтакта был выбран именно Google Calendar.

Плюсы этого решения:
  • возможность добавления множества уведомлений (почта, смс)
  • интеграция с другими веб-сервисами гугла (gmail, igoogle)
  • возможность импорта календаря из файла


Собственно, последний пункт и сделал возможным перенос дат из вКонтакта в Google Calendar.

Сразу оговорюсь, изначально скрипт я делал для себя и под себя. Поэтому не стоит упрекать меня в (возможном) отсутствии кроссбраузерности или ещё в чём-то. Скрипт по сути является одноразовым, поэтому, как мне кажется, те, кто действительно нуждается, могут даже поставить «чужой» браузер, greasemonkey, выполнить скрипт, удалить и забыть.

Системные рекомендации


(на этой конфигурации работоспособность скрипта была протестирована):
  • Firefox 3.5.5
  • Greasemonkey 0.8.2


Инструкция по эксплуатации:


  • Устанавливаем скрипт отсюда
  • Заходим на сайт http://vkontakte.ru, логинимся
  • Кликаем правой кнопкой в иконку гризманки, выбираем пункт «Команды скрипта», далее пункт «Get Birthdays!»
  • Должна появиться форма со списком друзей
  • Выбираем нужных (или всех) друзей и нажимаем «Экспорт»
  • Ждём, долго, я понимаю, но во вКонтакте какое-то ограничение на скорость открытия однотипных страниц, я один раз попался во время отладки скрипта. Поэтому (1.5 сек + скорость загрузки + скорость обработки) на одного друга.
  • После окончания обработки всех выбранных друзей вам будет предложено сохранить файл с нечитаемым именем. Это список событий в формате iCal
  • Заходите в Google Calendar.
  • Выбираете пункт «Настройки» под списком календарей
  • Выбираете пункт «Импорт календаря», можно предварительно создать новый календарь специально для дней рождения.
  • Наслаждаетесь новыми событиями в вашем календаре


Замечания


Повторюсь, скрипт писался под себя. Изначально там не было даже того примитивного интерфейса, который есть сейчас.
Промежуточный файл в формате iCal. По крайней мере, гугл его понимает. Формат этот был мной получен путём изучения исходников файла календаря, экспортированного из гугла, и удалением оттуда некоторых «ненужных полей». Расширение файла должно быть .ics, но для импорта это не обязательно.
В теле скрипта можно найти библиотеку jQuery. Да, я её засунул туда полностью.
Скрипт может тормозить браузер на слабых машинах.
Рекомендую удалить или отключить скрипт после использования, поскольку скрипт относительно тяжёлый и загружается для всего домена vkontakte.ru.

Собственно, всё. Если есть какие-то вопросы или пожелания, прошу.

upd
Решение от пользователя Putin для Chrome

Иван @Aivean
карма
64,5
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

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

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

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

  • –1
    а как этим пользоваться в хроме? (если можно каеш)
    • 0
      Поставить последний хром и этот плагин (по идее должно работать):
      www.chromeextensions.org/other/matt-monkey/
      • +1
        настройки у этого плагина на китайском, и как с ним работать непонятно.
        • 0
          Кнопки сверху. Слева направо.

          Сохраните сценарий параметров
          Изменение
          Удалить
          Отключить / Open
          Все Открытый
          Чтобы обновить формат данных MM0.2.1
          Имя сценария
  • +2
    Неплохо неплохо. Если разработчик вы — предложение, делать экспорт в формат «контакты» чтобы можно было смело засунуть всех друзей в телефон/или еще какое приложение. телефоны, емайлы, день рождения итд итп — было бы удобно.
    • +4
      Если эти контакты потом на телефон заливать, то неплохо было бы и аватарку пользователя дёргать.
    • 0
      Разработчик я, исходник открыт, там всё довольно тривиально, модифицируйте на свой вкус парсер и формат файла экспорта.
  • +1
    большое спасибо за это чудо!
    вот бы ещё он телефончики дёргал)))))
    а вообще было бы здорово если скрипт создавал что то типа копии данных о друзьях из vkontake… =)
  • +7
    Уже два года собирался вбить дни рождения в google calendar…
    Спасибо. Сейчас этим займусь :)
    • +5
      Алилуя!!! Вы сохранили мне несколько часов!!! Все уже сделано.
  • +1
    ай! спасибо!
  • –1
    Найс, вы реализовали мою идею. тепреь осталось научиться контакты в список контактов вгонять и места на карту, и надобность вконтакте отпадёт вообще )
  • +1
    Спасибо!
    Экспортировал в gкалендарь, оттуда в аутлук, из аутлука в нокийский сьют — вуаля, в телефоне все дни рождений. Уж теперь то никто не будет обделен вниманием)
    • 0
      Outlook не поддержвает импорт iCal?
      • 0
        Google Calendar Sync
        • 0
          Хммм… я не совсем понял что вы хотели сказать этой краткой фразой…

          Я хотел сказать, что если конечная цель вашей цепочки была — телефон, то можно было бы пропустить одно звено и сделать:

          «Сохранить iCal с помощью скрипта, оттуда в аутлук, из аутлука в нокийский сьют»
  • 0
    Не лучше ли было jquery подключить через @require?
    • 0
      кто-то писал, что это не кроссбраузерно, да и вообще, какая разница?
      • 0
        Ясно. Спасибо.
  • +2
    Экспортруем
    Синхронизиремся с гуглом
    Благодарим автора
    PROFIT!

    Спасибо огромное!!!
    • –3
      вы смотрите слишком много мультфильмов…
  • 0
    Насколько знаю, facebook свободно раздаёт наружу такие данные. Очень понравилось на android'е фишка: в контакты подтягивается информация о дне рождения и фото с facebook. А от ВКонтакте я такой фишки даже и не жду
    • 0
      Facebook дает возможность пользователю ограничет доступ.

      С этим я столкнулся когда захотел синхронизировать друзей из Facebook с Контактами на iPhone. Почти все мои друзья запретили доступ :(
    • 0
      А от ВКонтакте я такой фишки даже и не жду

      Фишку надо ждать не от Вконтакте, а от разработчиков софта для андроида. Ведь эту информацию можно получить и без какой-либо помощи со стороны сайта. Я думаю если кто-нибудь захочет реализовать эту идею, то непреодолимых сложностей у него не возникнет.
      Я, кстати, тоже использую коммуникатор с андроидом.
      • +1
        Vkontakte Sync — импортирует все контакты в гуглофон.
        Потом данные из вконтакте, можно объеденить с контактами в телефоне.
        Программка скачивает аватары, телефоны, дни рождения, место проживания.
        Так же, она может автоматом отслеживать изменения.
        • 0
          Спасибо. Надо попробовать
  • +1
    красотень. вконтакте все равно иногда д.р. глючат, спасибо!!!

    /me ушел делать)
  • +1
    огромное спасибо, давно хотел занять экспортом из вконтакта, но все руки не доходили =)
  • +2
    Спасибо! Яндекс календарь тоже дружит с iCal.
  • +1
    спасибо.
    лично для меня в календаре гугла удобно смс уведомление.
  • +1
    багрепорт: если у пользователя не указан год (а указаны только день и месяц рождения), то такие записи не экспортируются
    • +1
      спасибо, поправил
  • +1
    habrahabr.ru/blogs/gtd/27720/ а если совместить с етим…
    • 0
      а в рейнлендар и так можно загружать файлы iCal.
  • +1
    мн — оле засинхронил с iCal, и следом залил на любимую nokia через iSync
    Браво автор! Друзья не будут забыты :), благодаря вам!
  • 0
    А ГризиКит как его запустить?
  • –14
    а я вот не хочу засорять гугл-аккаунт мурней из контакта
    • +5
      а писать это было не обязательно
  • +1
    А может сделаем это дело приложением контактовским… выгрузка побыстрее должна пройти? Флешеры откликнитесь? )
  • 0
    я пользуюсь вот этим — code.google.com/p/gangsta-geek/source/browse/trunk/vk_calendar_bat_ics.pl
    немного подправив его под себя
  • +1
    Спасибо большое! Очень нужный скрипт.
    Люблю Google календарь! + с недавних времен Google научился присылать СМСки в Беларусь )
  • 0
    Подскажите как в Chromе его заюзать?
    Скрипт установился. Но меню найти не могу :)
    • 0
      Всё, что я могу предложить — изменить исходник скрипта, вызывать функцию do_all не через GM_registerMenuCommand, а как-нибудь по-другому, например по событию загрузки страницы.
      А ещё вы можете поставить Firefox portable, greasemonkey, запустить скрипт, потом всё удалить и забыть.
  • +1
    Спасибо, очень полезно!
  • +2
    dl.dropbox.com/u/2149116/62477.user.js
    Добавляет ссылку «Get birthdays» под «Мои настройки», результаты выводятся в новом окне(хром правда блокирует его, так что надо просить показать =(, плохо но ничего лучше пока не придумал), содержимое которого надо скопировать в нужный файл.

    • +1
      Это не мое, это от сюда
      • +1
        • 0
          Чето глючит… гуглокалендарь не принимает полученный файл:

          Обработано 0 мероприятий.

          Не удалось импортировать мероприятия: Не удается обработать файл iCal/CSV…

          Error at line 1: Expected [VCALENDAR], read [VCALENDAR PRODID]
          • 0
            Ага, у меня тоже.
            • 0
              Это проблема копирования в блокнот. Я просто очистил файл и заново скопировал. Гугл прожевал файлик но импортнул все в неправильной кодировке :(( По неосторожности импортнул в главный календарь, как теперь все обратно вернуть?
              • 0
                У меня тоже проблема с кодировкой. Не подскажете как её можно решить?
                • 0
                  Используйте редактор, поддерживающий сохранение в UTF-8, и принудительно указывайте именно эту кодировку при сохранении файла.
                • 0
                  Просто переключил при сохранении в блокноте кодировку в юникод и все нормально импортнулось. Только теперь не знаю как удалить все неправильно импортированые дни рождения… :(
    • 0
      Отлично!
      В хроме все получилось, в FF в Greasmonkey опция «команды скрипта» была не активна.
      Большое спасибо!!!
  • +1
    Спасибо!
    В Опере(9.60) сработало без проблем.
    Кнопка команды скрипта появилась в верхем правом углу окна, при нажатии — появляется пункт Get Birthdays. Дальше дело техники))
    • +1
      Это для хрома, но должен стоять matt-monkey, ссылка на него выше.
  • +1
    Вот спасибо автору!!! Вообще удобный импорт информации должны делать «разрабы» ресурсов. А не пытаться средневековыми методами удержать пользователей на ресурсе который им неинтересен. Хотя бы с помощью удобного импорта сделать попытку «Расстаться друзьями»…

    У меня только вышла непонятка… Контакты импортировал, в Google загнал… Он мне написал что «890 событий импортировано...» и… все… Т.е. ничего нигде не появилось. Где я ошибся? Или не сразу должно появиться?
    • 0
      Все, разобрался. Теперь показывает. Только он почему то про мой собственный день рождения забыл :) Его по хорошему тоже надо экспортировать :)
      • 0
        Я исходил из того, что вы вряд ли забудете свой день рождения ;)
        • 0
          Да если я забуду, то я смогу в паспорте посмотреть, нестрашно :)
          Но вот специально я его добавлять не стану. А это значит что пользователи которые имеют доступ к моему календарю не увидят когда у меня день рождения. И не поздравят :(
          :-)

          В качестве «фичи» можно было бы поздравление для «себя любимого» добавить :)
          • 0
            Сожалею, но, похоже, Вам всё же легче будет добавить Ваш День рождения в Ваш календарь, чем мне переписывать скрипт. К слову, тривиальным образом добавить эту «фичу» не выходит.
  • НЛО прилетело и опубликовало эту надпись здесь
  • 0
    Загружало список друзей полтора часа… Надоело. Вырубил. 195 друзей это много?
    Кстати, еще вопрос. Оно работает через API?
    • 0
      ну если учесть что у некоторых бывает и по 2000др… и больше то немного ))
      а вообще мои 220 друзей экспортировались, минут за 10 может чуть-чуть больше
    • 0
      Возможно, у Вас медленный интернет или слабый компьютер. Как я уже писал, никакого API по дням рождения вКонтакте не предоставляет. Единственно, для получения списка всех друзей используется ajax-запрос, возвращающий этот список в формате JSON. Однако дни рождения приходится парсить по-одному, загружая по-очереди страницы друзей. При этом, вКонтакт блокирует частые запросы однотипных страниц, поэтому пришлось сделать задержку между обращениями к страницам друзей.
      В идеальных условиях (быстрый интернет и компьютер) экспорт одного друга занимает 2-3 секунды, из которых 1.5 сек — просто задержка.
      • 0
        «каждую страницу»… мдя привет пипл с не безлимтным интернетом))
        у контакта во встречах есть календарь
        • 0
          Полностью с Вами согласен. Если бы я писал коммерческое решение, рассчитанное на широкую аудиторию, то я бы обязательно обратил внимание на оптимизацию потребления трафика. Однако, как я уже упоминал в посте, скрипт делался для себя и под себя. Если у Вас есть время и желание, оформите пост с описанием Вашего решения и, если оно окажется лучше, быстрее, оптимальней моего, я с радостью сам им воспользуюсь и скажу Вам спасибо.
      • 0
        Невозможно.
        Core Quad, 2.5 Mbit оптоволокно, потерь пакетов в жизни не было.
        Еще варианты?
        • 0
          Воткнул это — получило список друзей, поставил на экспорт.
      • 0
        По поводу API:
        Что если получить даты и ID юзеров отсюда:
        vk.com/events.php?act=calendar
        А имена юзеров через API? Хотя даже в календаре сразу можно видеть, так что и брать можно оттуда. Что думаете?
  • +1
    code.google.com/p/gangsta-geek/source/browse/#svn/trunk
    граббер дней рождений писл для себя
    вайпалка версия не актуальная
    должно работать…
  • +1
    Браво, очень полезно.
  • 0
    хм… мой предыдущий коммент пропал.
    clip2net.com/page/m0/267104
    это после использования скрипта.
    • 0
      По Вашей ссылке ошибка 404.
      • 0
        чорт.
        в общем, там скрин с 4 запросами на дружбу.
        явно от троллей (в сообщении с предложением дружбы есть бессмысленные цифры и символы).
        в профайлах — рекламные ссылки.
        • 0
          А какое это имеет отношение к экспорту дней рождения?
          • 0
            странно совпало.
            экспортировал даты рождения (кстати, из моих 130+ контактов ни один не попал в файл экспорта, хотя у многих указаны даты рождения) и сразу — 4 запроса одновременно. впервые такое количество подряд за столь малое время.
            • 0
              Согласен, странное совпадение. Если же вы пытаетесь намекнуть, что мой скрипт что-то делает помимо своей основной функции, то вы можете легко убедиться в обратном, просто установив файрбаг и посмотрев список ajax-запросов. И да, если это вас не убедит, код скрипта открыт, изучайте.
            • 0
              Опыт подсказывает что подобные боты ориентируются на активность пользователя.
              Так как скрипт генерирует немаленькую активность — то боты и накинулись.
              У меня после работы скрипта ничего не произошло.
              • 0
                Ориентируются на активность? А как они, по-вашему, смотрят активность, кроме как по статусу «Онлайн»?
                • 0
                  Не знаю. Но несколько раз была ситуация — акком долгое время не пользовались, а сразу после входа — в друзья билось несколько ботов.
                  Или за пять минут — 9 ботов в друзьях. Причем как только вошел
    • 0
      Там как бы можно нажать кнопку и посмотреть код…
      • 0
        так я, как бэ, слово «совпадение» низнанапесал.
        • 0
          Это да. Но причем тут скрипт. Верней, как вы это соотнесли вообще?:)
          Контакт мстит за обход его возможностей?:)
          • 0
            соотнес — по времени.
            наверное, мстит.

            * представляет Пашу Дурова в процессе отслеживания пользовательской активности и жОстко мстящего всем с помощью спам-ботов.
            • 0
              Да он сам — бот :)
  • 0
    Использую Safari в связке с GreaseKit. Есть ли возможность заставить работать скрипт под такое сочетание? (Все упирается в отсутствие мордочки)
  • 0
    Ужасно сильно тормозит и само по себе и весь браузер… инет быстрый, комп коредуо, примерно 200 записей пилил дчень долго
  • 0
    Аналог для Facebook: apps.facebook.com/fbcalendar/
    C помощью этого сервиса вы сможете перенести не только дни рождения друзей, а и события из Facebook в Google Calendar.
  • 0
    Попробовал на Mozilla Firefox 3.6.6 не работает! Последовательность действий:
    скачал GraceMonkey последний на сегодня, скачал скрипт, зашел вконтакт, запустил Get Bithday, появилось окно выбрал все контакты (178), нажал Экспортировать, после ожидания выдал файл размером чуть больше 500 байт который предложил сохранить, сохранил его, при импорте в гугл говорит мол обработано контактов 0, заглянул в файл, а там инфы о др совсем нет (я удивился размеру файла!)
    • 0
      Я с некоторых пор перестал поддерживать скрипт. Попробуйте аналог.
  • 0
    Присобачил др к календарю. Не знаете ли как теперь все теми же средствами зачистить все эти события с календаря? А то это серьезно начало досаждать. Ибо имена не скопипастились и каждое утро достает надпись в телефоне «ДР null»
    • 0
      Поиском по «ДР null» и дальше руками или через API. А вообще надо было отдельный календарь создать для дней рождения.

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