Реализация социального робота

Полностью код робота опубликован по адресу http://github.com/zag/lveeboteg [1]. На следующей схеме отмечены фактические названия модулей и подпрограмм. Это поможет ориентироваться при изучении исходных кодов.

Реализация социального робота

Я пройдусь по основным моментам реализации.

API FriendFeed

На мой взгляд у этой социальной сети одно из самых простых и доступных в использовании API [2].

Вот пример запроса содержимого группы:

http://friendfeed-api.com/v2/feed/lvee?pretty=1&num=60

Формат вывода - JSON. Его легко преобразовать в массив записей с помощью модуля JSON :

use JSON; 
sub fetch_frf {
   #...
   my $res=[]
   if ( $response->is_success ) {                 
       $res = decode_json( $response->content );  
    }                                              
   #...
   }

Для публикации в сообщений потребуется специальный ключ и login пользователя. Поэтому в friendfeed заведен специальный пользователь, от имени которого сообщения из twitter публикуются в friendfeed. При отправке подобных запросов используется http заголовок авторизации:

$r->header( Authorization => 'Basic '                                
          . encode_base64( $self->{frf_usr} . ':' . $self->{frf_key} ) );
    my $response = $ua->request($r);                                     

В FriendFeed есть свой собственный сервис сокращения ссылок. Для доступа к нему необходим запрос с идентификатором заметки:

my $res  = $self->post_frf( 
    "http://friendfeed-api.com/v2/short", 
    [ entry => $e->{entry}->{id} ] );                             
  $res = $res->{shortUrl} if $res;                                  

Сокращение ссылок необходимо при отправке сообщений в twitter.

Так как в twitter попадают сообщения администраторов группы, то требуется получить этот список. Для этого используется запрос: http://friendfeed-api.com/v2/feedinfo/lvee?pretty=1.

API Twitter

При работе с этим сервисом необходимо уметь получать список последних записей, а также - публиковать новые. Для подобных запросов к API потребуются зарегистрировать робота [3].

Для работы с API twiiter используется Perl 5 библиотека Net::Twitter.

Подключение и использование библиотеки выглядит следующим образом:

use Net::Twitter
 my $nt = Net::Twitter->new(
    traits              => [qw/OAuth API::REST/],
    consumer_key        => TWI_CONSUMER_KEY,
    consumer_secret     => TWI_CONSUMER_SECRET,
    access_token        => TWI_ACCESS_TOKEN,
    access_token_secret => TWI_ACCESS_TOKEN_SECRET,
 );

Значения констант TWI_CONSUMER_KEY, TWI_CONSUMER_SECRET, TWI_ACCESS_TOKEN, TWI_ACCESS_TOKEN_SECRET доступны после регистрации приложения в twitter.

Библиотека упрощает выполнение запроса на получение сообщений:

$nt->user_timeline( { count => 30 } )

А также публикацию:

$nt->update( { status => $text } )

При публикации сообщений в twitter требуется соблюдать ограничение в 140 символов. Если не получается опубликовать полностью, размещается сокращенное сообщение, снабженное ссылкой на оригинальное в группе friendfeed.

[1]Инструментарий для синхронизации группы в FriendFeed с twitter аккаунтом. http://github.com/zag/lveeboteg

[2]FriendFeed API. http://friendfeed.com/api/

[3] Страница регистрации приложений для Twitter. https://dev.twitter.com/apps