Difference between revisions of "Twitter"

From EPrints Documentation
Jump to: navigation, search
(Adding a twitter channel to eprints is dead easy.)
(Updated instructions to use HTTPS and version 1.1 of the API, as required by Twitter.)
 
(2 intermediate revisions by one other user not shown)
Line 1: Line 1:
 
[[Category:EPrints 3 Plugins]]
 
[[Category:EPrints 3 Plugins]]
== Adding a twitter channel to eprints is dead easy. ==
 
  
Set up a new twitter account for your repository if not already done so.
+
This recipe shows how to add tweets to your repository that occur whenever a new item is deposited.
  
Sign into your twitter account on [https://dev.twitter.com/] and then click "Register an app". Fill in the form:
+
== Installation ==
 +
 
 +
Install [http://search.cpan.org/search?query=LWP%3A%3AAuthen%3A%3AOAuth LWP::Authen::OAuth] and [http://search.cpan.org/search?query=LWP%3A%3AProtocol%3A%3Ahttps LWP::Protocol::https]
 +
 
 +
Set up a new [http://twitter.com Twitter] account for your repository if not already done so.
 +
 
 +
Sign into your Twitter account on [https://dev.twitter.com/] and then click "Register an app". Fill in the form:
  
 
* Name: enter your repository URL
 
* Name: enter your repository URL
Line 13: Line 18:
 
* Default Access Type: Read & Write
 
* Default Access Type: Read & Write
  
In your repository add the following to a new configuration file in cfg.d/ (e.g. called twitter.pl):
+
In your repository add to a new configuration file in cfg.d/ (e.g. ''twitter.pl''), substituting the values given below:
  
* Change ''oauth_consumer_key'' and ''oauth_consumer_secret'' to the values found on the twitter application page.
+
* Change ''oauth_consumer_key'' and ''oauth_consumer_secret'' to the values found on the Twitter application page.
* Change ''oauth_token'' and ''oauth_token_secret'' to the values found on the "My Access Token" page linked from the twitter application page.
+
* Change ''oauth_token'' and ''oauth_token_secret'' to the values found on the "My Access Token" page linked from the Twitter application page.
  
 
<pre><nowiki>
 
<pre><nowiki>
use LWP::Authen::OAuth; # install from CPAN
+
use LWP::Authen::OAuth;
  
 
$c->{twitter}->{authen} = {
 
$c->{twitter}->{authen} = {
Line 50: Line 55:
 
                         %{$eprint->{session}->config( "twitter", "authen" )},
 
                         %{$eprint->{session}->config( "twitter", "authen" )},
 
                 );
 
                 );
                 my $r = $oua->post( 'http://api.twitter.com/1/statuses/update.json', [
+
                 my $r = $oua->post( 'https://api.twitter.com/1.1/statuses/update.json', [
 
                         status => $tweet,
 
                         status => $tweet,
 
                 ] );
 
                 ] );
Line 65: Line 70:
 
* Log in and deposit an item to test
 
* Log in and deposit an item to test
  
==== Examples ====
+
=== Examples ===
  
 
* http://twitter.com/eprintsecs - ECS EPrints, Southampton
 
* http://twitter.com/eprintsecs - ECS EPrints, Southampton

Latest revision as of 11:25, 1 June 2016


This recipe shows how to add tweets to your repository that occur whenever a new item is deposited.

Installation

Install LWP::Authen::OAuth and LWP::Protocol::https

Set up a new Twitter account for your repository if not already done so.

Sign into your Twitter account on [1] and then click "Register an app". Fill in the form:

  • Name: enter your repository URL
  • Description: enter anything
  • Home page: enter your repository URL
  • Organization: enter anything
  • Application Type: Client
  • Default Access Type: Read & Write

In your repository add to a new configuration file in cfg.d/ (e.g. twitter.pl), substituting the values given below:

  • Change oauth_consumer_key and oauth_consumer_secret to the values found on the Twitter application page.
  • Change oauth_token and oauth_token_secret to the values found on the "My Access Token" page linked from the Twitter application page.
use LWP::Authen::OAuth;

$c->{twitter}->{authen} = {
        oauth_consumer_key => 'c2nOQSd2asDF9nhqFKCWg',
        oauth_consumer_secret => '9hz7hoNIpk29slqtJ46yOg7HXAqOPrETnueNGrTXu4',
        oauth_token => '15203291-1qVbfWHh9Sa8sjdkmqyP8eB9XyxhouZhPnRrKnwQj',
        oauth_token_secret => 'SZmj2zKsVGrEpPDDaZBrE92ksLwf0oBJ8X4medYoX8',
};

$c->{eprint_status_change} = sub
{
        my( $eprint, $old_status, $new_status ) = @_;

        if( $new_status eq "archive" )
        {
                my $ua = LWP::UserAgent->new;
                my $url = URI->new( 'http://is.gd/api.php' );
                $url->query_form(
                        longurl => $eprint->get_url
                );
                my $shorturl = $ua->get( $url )->content;
                my $title = $eprint->get_value( "title" );
                {
                        use bytes;
                        $title =~ s/^(.{0,100})/$1/;
                }
                my $tweet = "$title - $shorturl";

                my $oua = LWP::Authen::OAuth->new(
                        %{$eprint->{session}->config( "twitter", "authen" )},
                );
                my $r = $oua->post( 'https://api.twitter.com/1.1/statuses/update.json', [
                        status => $tweet,
                ] );
                if( $r->is_error )
                {
                        $eprint->{session}->log( "Tweet failed: ".$r->as_string );
                }
        }

};
  • Restart Apache ( /etc/init.d/apache2 force-reload , or similar)
  • Log in and deposit an item to test

Examples