sábado, 22 de junio de 2013

Migrando Módulo Net::Twitter hacia API Twitter v1.1


Para quienes usamos Perl día a día para simplificar algunas tareas y automatizar un poco, es que va destinado esta entrada sobre el Modulo de Net::Twitter y su migración desde la API de Twitter v1 hacia la v1.1

Muchas veces usamos perl para programar bots que repitan mensajes aleatorios, o algo tan simple como twittear desde la linea de comando de forma rápida o hasta para monitorizar a distancia.

En fin muchos se habrán dado cuenta que sus codes asociados a la API de twitter a dejado de funcionar debido al cambio de API a la versión 1.1

Aquí dejo los pasos para migrar de forma exitosa y volver a tener rodando nuestros queridos codigos.





SYNOPSIS






use Net::Twitter
 
my $nt = Net::Twitter->new(
    traits              => [qw/API::RESTv1_1/],
    consumer_key        => $consumer_key,
    consumer_secret     => $consumer_secret,
    access_token        => $access_token,
    access_token_secret => $access_token_secret,
);


DESCRIPCION

Net :: Twitter antes de la versión 4.0 utiliza la API de Twitter de la versión 1. Ahora el API de Twitter v1.1 introdujo cambios que no son completamente compatibles hacia atrás, lo que requiere algunos cambios en el código de llamada.

Net::Twitter intenta siempre que la compatibilidad con versiones anteriores sea posible. En este documento se explica los cambios necesarios que debemos aplicar en el codigo de la nuestra aplicación para que pueda funcionar el Modulo Net::Twitter con la API de twitter version 1.1.


LO PRIMERO


Incluir API::RESTv1_1



Cada vez que creamos objeto en Net::Twitter llamando un new , debemos reemplazar  API::REST y dejarlo como API::RESTv1_1  . Para la mayoria de las aplicaciones esto es todo lo necesario.


EXCEPCIONES


La característica  Ratelimit es incompatible con el API::RESTv1_1


La caracteristica Ratelimit es incompatible con el API::RESTv1_1 . Rate limiting es uno de los cambios mas grandes en la versión 1.1.  En la v1 habia dos tipos de rate limit, uno para direcciones IP para llamadas no autenticadas y otro para usuario/aplicación para llamadas autenticadas. En la versiones 1.1 cada llamada debe estar autenticada y cada endpoint de la API ( i.e: Cada metodo ) tiene su rate limit. Los nuevos rate limits operan en una ventana de 1 hora.


Si tu codigo actualmente utiliza RateLimit tendrás que escribir código personalizado proporcionar una funcionalidad equivalente.



rate_limits_status


El valor de retorno para rate_limits_status es totalmente diferente. Consulte la documentación de la API de Twitter rate_limit_status para más detalles.









blocking
blocking_ids
friends
followers

Con API v1.1, estos métodos utilizan  cursor. Si usted no pasa un parámetro cursor, Twitter asume cursor => -1>
EL código existente que espera un valor de retorno arrayref debe ser modificado para esperar uno hashref y eliminar la referencia del slot users.

# With API v1
my $r = $nt->friends;
my @friends = @$r;
 
# With API v1.1
my $r = $nt->friends;
my @friends = @{$r->{users}};

Search

El método de búsqueda y el valor de retorno son sustancialmente diferentes entre Twitter API v1 y v1.1. En v1, búsqueda fue proporcionada por la característica API::Search . En v1.1, search se incluye en la característica API::RESTv1_1.

En primer lugar, debemos eliminar API::Search de sus llamadas a new. La caracteristica API::Search es incompatible con la API::RESTv1_1.

En v1, Twitter ha devuelto un hashref con varias teclas que contienen los metadatos. El conjunto actual de resultados se encuentra en el slot results:



# With Twitter API v1
my $nt = Net::Twitter->new(traits => [qw/API::REST API::Search/]);
 
my $r = $nt->search('perl hacker');
for my $status ( @{$r->{results} ) {
    # process each status...
}


Version 1.1 devuelve un hash con 2 slots: search_metadata and statuses



# With Twitter API v1.1
my $nt = Net::Twitter->new(traits => [qw/API::RESTv1_1/], %oauth_credentials);
 
my $r = $nt->searh('perl hacker');
for my $status ( @{$r->{statuses} ) {
    # process each status...
}


Desplazamiento por los resultados de búsqueda funciona de forma diferente en v1.1. En v1, Twitter ofrece un parámetro page:


# With Twitter API v1
for ( my $page = 1; $page <= 10; ++$page ) {
    my $r = $nt->search({ q => $query, page => $page, rpp => 100 });
    last unless @{$r->{results}};
 
    # process a page of results...
}


En la v1.1, se usa  max_id y count para obtener los resultados:



# With Twitter API v1.1
for ( my %args = ( q => $query, count => 100 ), my $n = 0; $n < 1000; ) {
    my $r = $nt->search({ %$args });
    last unless @{$r->{statuses}};
 
    $args{max_id} = $r->{statuses}[-1]{id} - 1;
    $n += @{$r->{statuses}};
 
    # process a page of results...
}


METODOS DESAPOBRADOS
algunos metodos de la API v1 de Twitter no estan disponibles para la v1.1:
friends_timeline
usar home_timeline en cambio
friendship_exists
relationship_exists
follows
friendship_exists y sus alias no están soportados en API v1.1. Debes usar show_friendship en cambio:

my $r = $nt->show_relationship({
    source_screen_name => $user_a,
    target_screen_name => $user_b,
});
if ( $r->{relationship}{source}{following} ) {
    # $user_a follows $user_b
}



//FIN

## Twitter for all 
## Fuente original

No hay comentarios: