Download - Présentation de gplus to-twitter
gplus -to-twitter
Fabien Baligand
Cliquez pour ajouter un titre
• Cliquez pour ajouter un plan
2
gplus -to-twitter, c’est quoi ?
� Une application sur AppEngine :
� http://gplus-to-twitter.appspot.com
� Publie automatiquement toutes les 5 minutes, pour chaque compte configuré, les postspubliques Google+ vers Twitter
Cliquez pour ajouter un titre
• Cliquez pour ajouter un plan
3
pourquoi gplus -to-twitter ?
� Parce que je n’ai pas trouvé d’outil équivalent
� Pour le petit challenge technique
� Pour découvrir l’API Google+ dès sa sortie
� Pour avoir une alternative à Google Reader -> Partag er -> FriendFeed -> Twitter :
� Reader -> Partager -> Google+ -> gplus-to-twitter -> Twitter
� Et parce que c’est cloud, c’est fun et c’est geek ;)
Cliquez pour ajouter un titre
• Cliquez pour ajouter un plan
4
Outils / Technos utilis és
� Google+ API / google-api-java-client
� Twitter4j
� OAuth 2
� Google App Engine
� Cron / Servlet / JSP / DataStore
� Objectify
� Jsoup
Cliquez pour ajouter un titre
• Cliquez pour ajouter un plan
5
Architecture
GoogleApp Engine
GoogleApp Engine
/admin/gplus-to-twitter/admin/gplus-to-twitter
Cron / toutes les 5 min1
DataStore« Account »
DataStore« Account »
2 Objectify
Google+REST API
Google+REST API
TwitterREST API
TwitterREST API
3google-api-java-client
4
Jsoup (HTML to TEXT)
5twitter4j
Cliquez pour ajouter un titre
• Cliquez pour ajouter un plan
6
Google+ API / google -api-java -client
� Google+ API fournit les APIs REST suivantes:
� Consulter le profil d’un utilisateur
� Lister les posts publics d’un utilisateur
� Recherche full-text de profils ou de posts
� Sécurité
� Authentification par Google Key (accès aux données publiques)
� Authentification par OAuth 2 (accès aux données privées)
� google-api-java-client :
� Ensemble de librairies java wrapant les services REST proposés par les Google APIs
� https://developers.google.com/+/api/
� http://code.google.com/p/google-api-java-client/
Cliquez pour ajouter un titre
• Cliquez pour ajouter un plan
7
Google+ API – récupérer les posts publics
Plus plus = Plus.builder(new NetHttpTransport(), new GsonFactory())
.build();
ActivityFeed feed = plus.activities().list(googlePlusUserId, "public").execute();
for (Activity activity : feed.getItems()) {String content = activity.getPlusObject().getContent();System.out.println(content);
}
Cliquez pour ajouter un titre
• Cliquez pour ajouter un plan
8
Google+ API – utiliser une API key
1. Accéder à https://code.google.com/apis/console/
2. Créer un nouveau projet
3. Choisir les services Google auxquels accède le proj et
4. Récupérer la clé générée dans l’onglet « API Access »
5. Utiliser la clé pour initialiser le client Google+ :Plus plus = Plus.builder(new NetHttpTransport(), new GsonFactory()).setJsonHttpRequestInitializer(
new JsonHttpRequestInitializer() {public void initialize(JsonHttpRequest request) {
((PlusRequest)request).setKey(GOOGLE_API_KEY);}})
.build();
Cliquez pour ajouter un titre
• Cliquez pour ajouter un plan
9
Twitter4j
� Twitter4j permet d’effectuer les actions suivantes sur un compte Twitter :
� Lire les tweets de la timeline
� Consulter le profil, les suivants et suivis
� Mettre à jour le profil, s’abonner à de nouvelles timelines
� Poster des tweets
� Sécurité des actions :
� En lecture : aucune authentification
� En écriture : authentification OAuth 2
� http://twitter4j.org
Cliquez pour ajouter un titre
• Cliquez pour ajouter un plan
10
Twitter4j – lire une timeline
Twitter twitter = new TwitterFactory().getInstance();
List<Status> timeline = twitter.getUserTimeline("fbaligand");
for (Status status : timeline) {System.out.println(status.getText());
}
Cliquez pour ajouter un titre
• Cliquez pour ajouter un plan
11
Twitter4j – poster un tweet
AccessToken accessToken = new AccessToken(token, tokenSecret);
Twitter twitter = twitterFactory.getInstance(accessToken);
twitter.updateStatus("hello twitter!");
Cliquez pour ajouter un titre
• Cliquez pour ajouter un plan
12
OAuth 2 – Concepts
� Permet de fournir un jeton d’accès à une application identifiée pour accéder à son compte, sans fournir son mot de passe
� Permet de révoquer à tout moment un jeton accordé à une application donnée ou de le générer à nouveau
Cliquez pour ajouter un titre
• Cliquez pour ajouter un plan
13
OAuth 2 – Mise en oeuvre
1. On déclare une nouvelle application sur https://dev.twitter.com
2. Une application possède alors une clé d’identificati on et un mot de passe
3. On configure twitter4j avec ces identifiants d’application
4. Via twitter4j, on génère un jeton de requête
5. L’utilisateur cible accepte ce jeton de requête via une URL d’autorisation
6. Via twitter4j, on récupère le jeton d’accès résulta t (et le mot de passe associé)
Cliquez pour ajouter un titre
• Cliquez pour ajouter un plan
14
OAuth 2 – Configuration
� Configuration de /twitter4j.properties :oauth.consumerKey=<appConsumerKey>
oauth.consumerSecret=<appConsumerSecret>
� Configuration de l’instance Twitter :AccessToken accessToken =
new AccessToken(token, tokenSecret);
Twitter twitter = twitterFactory.getInstance(accessToken);
Cliquez pour ajouter un titre
• Cliquez pour ajouter un plan
15
Google App Engine
� Éléments de l’application GAE :
� Une servlet d’envoi des posts G+ vers twitter (appelée toutes les 5 minutes par cron)
� Un formulaire JSP de saisie et une servlet de création d’un nouveau compte Google+ / Twitter
� Une entité « Account »
� Sécurité : Les 2 servlets et la JSP ne sont accessibles que par l’administrateur de l’application et par cron
Cliquez pour ajouter un titre
• Cliquez pour ajouter un plan
16
Google App Engine - Cron
� Fichier /WEB -INF/cron.xml :<cronentries>
<cron><url>/admin/gplus-to-twitter</url><description>a description</description><schedule>every 5 minutes</schedule>
</cron></cronentries>
Cliquez pour ajouter un titre
• Cliquez pour ajouter un plan
17
Objectify
� Framework de persistance sur le DataStorede Google App Engine
� Très simple à utiliser et adapté à une base NoSQL (contrairement à JDO et JPA)
� Introduction à Objectify :
� Présentation de Patrice de Saint Steban
� Site du projet :
� http://code.google.com/p/objectify-appengine/
Cliquez pour ajouter un titre
• Cliquez pour ajouter un plan
18
Jsoup
� Librairie Java de parsing HTML :
� transforme du HTML en texte simple
� Trouve et extrait une liste de noeuds HTML grâce à un sélecteur CSS jQuery
� Exemple de code :String text =
Jsoup.parse("<span><i>un texte</i></span>").text();
� Site du projet :
� http://jsoup.org/
Cliquez pour ajouter un titre
• Cliquez pour ajouter un plan
19
Conclusion
� L’étape d’après : ouvrir l’application à tout utilisateur voulant s’enregistrer
� Limite bloquante : le quota de Google+ API limité à 1000 requêtes par jour
� http://gplus-to-twitter.appspot.com