Объединяем twitter.com и vkontakte.ru (php — версия)

    Навеяно постом http://habrahabr.ru/blogs/python/59236/.
    Почитав вышеуказанный пост, предположил, что не каждый сможет использовать домашний комп для таких целей (например потому, что он включен не постоянно). Но зато многие из нас имеют php-хостинг, который так же поддерживает cron. Для разминки написал данный скрипт.

    При написании использовал:
    twitter API, которое скачал тут
    vkontakte API, которое написал сам. Код скрипта получился таким:

    <?
    include 'twitter.class.php';
    include 'vkontakte.class.php';
    include 'config.php';

    $twitter = new twitter();

    $twitter->username = $twitterUser;
    $twitter->password = $twitterPassword;

    $statusTwitter = $twitter->userTimeline()->status->text;

    $vk = new VkontakteAPI($vkontakteEmail, $vkontaktePassword);
    $vk->auth();

    $statusVkontakte = $vk->getStatus();

    if ($statusTwitter != $statusVkontakte)
    {
    $vk->setStatus($statusTwitter);
    }
    ?>


    Итого нужно залить это в папку на хостинг, прописать настройки аккаунтов в файле config.php, который имеет
    следующий ввид:
    <?
    $twitterUser = 'pupkin';
    $twitterPassword = 'temp';

    $vkontakteEmail = 'pupkin@yandex.ru';
    $vkontaktePassword = 'temp';
    ?>

    . И в принципе скрипт готов к использованию.

    Прошу прощения за «недокументированность» моего кода, думаю тут и так все понятно, но все таки будет чуть свободного времени задокументирую. Принимаю вопросы и предложения по развитию скрипта. А так же возможные баги, которые буду стараться править в кратчайшие сроки.

    Полный архив вместе с API можно скачать тут: www.radmus.net/downloads/twitter2vkontakte.zip

    Приятного использования! =)
    Поделиться публикацией

    Похожие публикации

    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

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

    Комментарии 75

      0
      Нужно бы еще добавить проверку возвращаемых результатов, например, $twitter->userTimeline() может и false возвращать. Как результат, при каких-то траблах со стороны твиттера (который в последнее время опять нестабилен), статус vkontakte будет удалятся.
        +19
        Вы бы хоть пароли свои с конфига убрали, не все ведь такие честные, что ими не воспользуются.
          +3
          Спасибо. Это моя огромная ошибка, больше не буду такие вещи делать в 5 утра )
        0
        Понимаю что API, но все равно объем кода на PHP радует :)
          +1
          я сначала думал, что там будет на 120Кб :) Оказалось курл положили :)
          –3
          Пытюсь запустить ма Маке:

          File «twitter_in_vkon.py», line 67
          if timeout:
          ^
          IndentationError: unindent does not match any outer indentation level
            +1
            Вы кажется ошиблись топиком. Вам сюда habrahabr.ru/blogs/python/59236/
            0
            Спасибо, будем пробовать
          • НЛО прилетело и опубликовало эту надпись здесь
            0
            ээх, не качается www.radmus.net/downloads/twitter2vkontakte.zip — хабра эффект? чисто хотелось сравнить со своим классом авторизации в соц сети.
              0
              С домашней машины, которая работает 24*7 и постоянно подключена к инету будет работать? Потому что на денвере не запустилось.
              Fatal error: Call to undefined function curl_init() in Z:\home\twitter\www\twitter.class.php on line 253
              Или я что-то не так делаю?
                0
                У меня работает на денвере, но нужно поставить библиотеку cURL дополнительно к денверу. Я добавил ее к архиву. Для установки Вам нужно положить ее в папку Z:\usr\local\php5\ext\ и в файле Z:\usr\local\php5\php.ini заменить строчку
                ;extension=php_curl.dll
                на
                extension=php_curl.dll

                Перезапускаем денвер и все работает.
                  0
                  Копировать в папку нужно только файл php_curl.dll
                    0
                    Понял, спасибо. Попробую.
                      0
                      Отлично. Все работает, спасибо.
                    0
                    Поставил, попробовал — не работает. Причина: В контакте сообщает, что я выполняю действия слишком быстро. Добавил после каждого curl_exec немного «сна» (sleep(2)) — все работает, спасибо )
                      0
                      У меня работало наверное потому, что инет не оч быстрый. Добавил у себя, спасибо за замечание.
                        0
                        вконтакте запрещает действие, если прошая активность была менее 1 секунды назад.
                        До сих пор не удалось скачать =( Поэтому спросшу тут — как автор обошел проблемы с тем, что после ввода логин/пароль сайт иногда авторизирует, а иногда кидает на страницу авторизации, но уже с картинкой (каптчей)?
                          0
                          Странно, но мне удается скачать и сейчас. Если есть желание, могу выслать вам на почту. По поводу как обходил, затрудняюсь ответить. Вроде бы ничего особого и не делал там. Все разы что я запускал у себя, всегда входило без проблем.
                            0
                            вышлите пожалуйста sovgvd (цобак) gmail.com =)
                            я просто писал проектик связанный с вконтактом, периодически при авторизации сайт перекидывал на страницу авторизации с картинкой, приходилось сохранять куки и держать их в базе, надеясь что по ним всё еще получится лазить =)
                              +1
                              Выслал.
                        0
                        Скрипт парсит vkontakte.ru напрямую. Зачем? Есть же User API -> userapi.com/?act=doc#activity
                          0
                          Спасибо. Когда писал не знал о нем. В гугле сразу не нашел его...)
                            0
                            через UserAPI даже нет смысла пытаться такое сделать… щас попробовал хотя бы что нибудь — авторизация клиента, любые запросы и прочее только через JS, ответ в виде JSON… т.е. через php обращения не получиться.
                              0
                              получится.
                              По крайней мере я это делал с помощью Ruby без проблем. Думаю с PHP аналогично.
                              UserAPI довольно неплохо документировано. Надо только авторизироваться и получить cookie. Затем посылать запросы к серверу и получать ответ в JSON.
                                0
                                я пытался авторизироваться посылая GET запрос (через cURL):
                                $url="http://login.userapi.com/auth?​login=force&site=".$site_id."​&email=".$login."&pass=".$pass;

                                ответ такой (никакого намека на sid):
                                HTTP/1.1 200 OK
                                Server: nginx/0.6.31
                                Date: Sun, 10 May 2009 20:27:11 GMT
                                Content-Type: text/html; charset=windows-1251
                                Connection: keep-alive
                                X-Powered-By: PHP/5.2.0-8+etch13
                                Set-Cookie: remixlang=0; expires=Mon, 10-May-2010 20:27:11 GMT; path=/; domain=.vkontakte.ru
                                Pragma: no-cache
                                Cache-control: private, must-revalidate
                                Set-Cookie: remixchk=5; expires=Sat, 08-May-2010 01:48:56 GMT; path=/; domain=.vkontakte.ru
                                Content-Length: 0

                                утречком проснусь — еще подумаю

                                и еще, скрипт обязан находиться на домене к которму привязан site_id или можно авторизироваться и на durov.ru используя site_id=2?
                                  0
                                  недождался утра, решил проверить какой заголовок уходит при авторизации на дуров.ру

                                  login.userapi.com/auth?site=2&id=0&fccode=0&fcsid=0&login=force&email=ЛОГИН&pass=ПАРОЛЬ

                                  вобщем id=0&fccode=0&fcsid=0 — сильно влияют на авторизацию =)
                                    0
                                    cURL не пользуюсь
                                    На Ruby + Mechanize виглядит так:

                                    agent = WWW::Mechanize.new
                                    url = «login.userapi.com/auth?login=force&site=2&email=#{email}&pass=#{pass}»
                                    login_page = agent.get(url)
                                    if !agent.cookies.nil?
                                    login = true
                                    id = /remixmid=(\d+)/.match(agent.cookies[0].to_s)[1]
                                    sid = /.*;sid=(\w*)/.match(login_page.uri.to_s)[1]
                                    return true
                                    else
                                    return false
                                    end

                                    sid потом используется при запросе данных.
                                    Если кому интересно некоторые наброски здесь: github.com/mamantoha/vkontakte-api/tree/master
                                      0
                                      однако странно что со строкой:
                                      login.userapi.com/auth?site=2&id=0&fccode=0&fcsid=0&login=force&email=ЛОГИН&pass=ПАРОЛЬ
                                      авторизируется на ура, а со строкой:
                                      login.userapi.com/auth?​login=force&site=2&email=ЛОГИН&pass=ПАРОЛЬ
                                      никак
                            0
                            почитад документацию и не совсем понял — нужно ли регистрировать некий сайт или авторизироваться и смотреть контакты, сообщения и прочее можно без каких либо проблем?
                            +3
                            А зачем транслировать твитты во вконтактик? Или я чего-то не понял?

                              0
                              Реплаи не публикуются?
                                0
                                публикуются, но это легко исправить.
                                Можно например так:

                                if(!substr($statusTwitter,0,1) == "@") {

                                //

                                }
                                0
                                Не могу понять зачем в карму минусовать… (
                                  0
                                  Народ я что то не понял — почему нельзя скажем зарегить приложение vkontakte и получать статусы через родное API?
                                    0
                                    залил на мастерхост, не работает, скрипт грузится и ничего не происходит…
                                      0
                                      Уверены что правильно прописали свои настройки?
                                        0
                                        Уверен.
                                          0
                                          а уверены что IP вашего провадера не забанены для vkontakte.ru? (через toonel.net и прочие можно не пытаться — ситуация аналогина)
                                            0
                                            Нет, в этом конечно не уверен, но вряд ли вконтакте забанил бы айпишники мастерхоста?
                                              0
                                              ну ипы инфобокса например забанены… причем все, включая выделенные сервера
                                                0
                                                омг, за что?
                                                  0
                                                  просто так, чтобы не лазили и не плодили ботов… пинговаться — пингуется, но тупо 'wget vkontakte.ru/' не работает… некоторое время работало через toonel.net но потом и через него перестало работать… жалко
                                      0
                                      Radmus, молодцом!
                                        0
                                        Warning: curl_setopt() [function.curl-setopt]: CURLOPT_FOLLOWLOCATION cannot be activated when in safe_mode or an open_basedir is set in /home/public_html/twitter2vkontakte/twitter.class.php
                                          0
                                          как побороть это?
                                            0
                                            Наверное, отключением безопасного режима PHP и грамотной настройкой open_basedir?
                                              0
                                              Я думаю что можете просто закомментировать (поставить // в начале) 267 строку в файле
                                              curl_setopt($ch, CURLOPT_FOLLOWLOCATION,1);
                                                0
                                                закомментировал, но не работает
                                                  0
                                                  скрипт не выполняется (зависает)
                                                    0
                                                    Тогда скорее всего придется выключать safe mod.
                                                      0
                                                      мой провайдер этого не позволит
                                                        0
                                                        узнал у хостера, все таки safe mode выключен
                                                0
                                                Чуть чуть офтоп, но может кто знает софтину под мак или win которая мониторит весь http (можно не только http=) трафик с компа? Просто httpfox и Tamper Data не всегда справляется (особенно при передачи бинарных файлов)
                                                  0
                                                    0
                                                    А он бинарные данные хорошо обрабатывает? И следит за трафиком идущим только из ie или от любого приложения? И он вроде shareware, не подскажите там триал версия или ограниченная по функциональности бесплатно дается?
                                                      0
                                                      Не понимаю, что значит «хорошо обрабатывает» — попробуйте поставить. Следить за трафиком от любого приложения. Триал версия — 15 дней.
                                                        0
                                                        Спасибо за помощь) Хорошо обрабатывает — для меня это значит, что можно простым нажатием мыши выцепить передаваемый бинарный файл.
                                                          0
                                                          Поставил, но stand alone версия что-то вылетает через секунд 20-30 после запуска.
                                                    0
                                                    + еще такой момент: кодировка В контакте windows-1251, Твиттера — UTF-8. В таком виде строки при сравнении не будут равными и обновление статуса будет происходить постоянно, что будет раздражать ваших друзей.
                                                    + еще момент: если статус в Твиттере заканчивается на точку ".", то В контакте он будет без точки, всегда (он ее обрезает, чтобы самостоятельно ее поставить). Отсюда, опять-таки, та же проблема — не соответствие строк.

                                                    Выложить свой index.php здесь почему то не получается :(
                                                      –2
                                                      Кому-то ещё нужен вконтакте?
                                                        0
                                                        Народ, а у кого-нибудь получается с серверов хостинга рбк достучаться до 80 порта вконтакта?
                                                          0
                                                          Похоже у меня до соединения на вконтакте даже не доходит :(

                                                          * About to connect() to twitter.com port 80 (#0)
                                                          * Trying 128.121.146.100… * connected
                                                          * Connected to twitter.com (128.121.146.100) port 80 (#0)
                                                          * Server auth using Basic with user 'neptunix'
                                                          > GET /statuses/user_timeline.xml?count=20 HTTP/1.1
                                                          >…

                                                          < HTTP/1.1 200 OK
                                                          < Date: Thu, 21 May 2009 09:31:15 GMT
                                                          < Server: hi
                                                          <…
                                                          * Closing connection #0
                                                            0
                                                            подскажите, как проверить соединяется ли скрипт с вконтактиком?

                                                            Точнее как я понял он соединяется, вконтактовский статус получает, но вот новый не устанавливает. В чем беда может быть?
                                                              0
                                                              разобрался, оказалось папке нужно было выставить права на запись
                                                              0
                                                              Вот такое у меня, скорее всего — после обновления API во вконтакте:

                                                              PHP Notice: Undefined offset: 0 in /home/dsxack/www/vkontakte.class.php on line 40
                                                                0
                                                                так же. Перестало работать.
                                                                  0
                                                                  Twitter закрыл старое API, теперь только OAuth

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

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