Construire avec l'API Twitter Mise en route

Ce que vous allez créer

Commencer à utiliser l'API Twitter peut sembler un peu compliqué, mais c'est en fait assez simple. Il existe un certain nombre de bibliothèques de langages courants qui facilitent grandement le processus. La documentation de l'API de Twitter s'est également grandement améliorée au fil du temps.

En mars 2013, Twitter a commencé à exiger OAuth pour toutes les sessions d'API, ce qui a entraîné des améliorations pour les utilisateurs et les développeurs. La plate-forme authentifiée sécurisée d'OAuth a aidé Twitter à protéger la confidentialité des utilisateurs tout en améliorant le suivi. cela a ensuite permis à l'entreprise d'augmenter les limites imposées aux développeurs pour les appels d'API individuels.

Cette série comprend trois parties. La première partie couvrira:

  • une introduction à l'API Twitter
  • construire un schéma de base de données pour Twitter
  • construire une application PHP dans le framework Yii pour travailler avec Twitter

Birdcage, notre application Twitter Yii de base utilisée dans ce tutoriel, est disponible via open source. Si vous souhaitez en savoir plus sur Yii, consultez Introduction au framework Yii..

La deuxième partie de cette série couvrira: 

  • authentification avec Twitter via OAuth
  • traitement des tweets entrants en arrière-plan à l'aide de l'API REST
  • poster des tweets

La troisième partie couvrira l'utilisation de l'API Twitter Streaming en temps réel et de l'implémentation open source Phirehose Stream. Alors que la deuxième partie traite les tweets à l'aide de l'API REST, la troisième partie décrira comment créer une connexion permanente avec le flux de données Twitter. Cela peut être un nouveau sujet pour de nombreux développeurs PHP.

Introduction à l'API Twitter

Pour l’essentiel, cette série de tutoriels se concentrera sur trois parties de la plateforme Twitter: 

  1. Authentification OAuth
  2. l'API REST
  3. l'API Streaming

Vous pouvez lire la documentation de l'API Twitter ici.

Authentification OAuth

À partir de la version 1.1, l'API Twitter requiert désormais une authentification OAuth, soit une authentification uniquement d'application, soit une authentification d'utilisateur. Cette dernière nécessite que votre utilisateur de Twitter accède au site Web de Twitter, se connecte avec ses informations d'identification, puis revienne sur votre site. L'authentification de l'utilisateur de l'application est requise pour de nombreux appels d'API spécifiques à l'utilisateur.. 

En d'autres termes, lorsque vous commencez à accéder à l'API Twitter au nom d'un utilisateur, celui-ci sera dirigé vers Twitter pour autoriser votre application. Twitter retournera les jetons qui n'expirent pas jusqu'à ce que l'utilisateur les révoque. Vous utiliserez ces jetons pour authentifier vos appels pour le compte de cet utilisateur..

L'API REST

Le moyen le plus courant d'accéder aux données Twitter est via l'API REST. À l'aide des jetons sécurisés obtenus via OAuth, votre application envoie des demandes à Twitter pour des données spécifiques, par exemple. la chronologie personnelle de l'utilisateur ou ses propres statuts, ou une demande de publication d'un tweet pour un utilisateur spécifique.

L'API REST devrait répondre aux besoins de la plupart des programmeurs d'applications Twitter.. 

L'API Streaming

L'API Twitter Streaming vous permet de recevoir des tweets et des notifications en temps réel de Twitter. Cependant, il nécessite une connexion performante, persistante et permanente entre votre serveur et Twitter.. 

Heureusement, il existe une excellente bibliothèque open-source appelée Phirehose de Fenn Bailey, qui met en œuvre la plupart des exigences relatives aux API de diffusion en continu sur Twitter. Nous examinerons comment configurer Phirehose et l’adapterons à votre application dans la troisième partie de ce tutoriel..

Il existe trois variantes de l'API Twitter Streaming:

  1. Le flux public. Cela permet à votre application de surveiller les données publiques sur Twitter, telles que les tweets publics, les filtres de hashtag, etc.. 
  2. Le flux d'utilisateur. Cela vous permet de suivre en temps réel le flux tweet d'un utilisateur. La troisième partie de ce tutoriel se concentrera sur le flux utilisateur.. 
  3. Site Streams (nécessite l'approbation préalable de Twitter). Les flux de site permettent à votre application de surveiller les flux Twitter en temps réel pour un grand nombre d'utilisateurs.. 

La mise en œuvre de votre diffusion en continu consiste à enregistrer les événements entrants le plus rapidement possible et à les traiter en arrière-plan à l'aide de l'API REST, selon les besoins, pour collecter des données plus profondes. Twitter appelle parfois ce rassemblement de données plus approfondies sur les événements "hydratant".

L'utilisation de l'API REST est soumise à diverses limites de taux par Twitter. Il est important d’être un utilisateur responsable de l’API de Twitter en planifiant les limites de votre activité au sein de votre application et en surveillant les réponses aux limites de débit de l’API. L’API de streaming n’a pas de limite de débit puisque les données sont transférées vers votre serveur à l’arrivée.

Construction d'un schéma de base de données pour l'API Twitter

Bien que Twitter semble simple, il s’agit en réalité d’un flux de données très profond et complexe, comprenant une chronologie toujours croissante, des relations entre utilisateurs, des mentions, des notifications, des favoris, des listes, la géolocalisation, le multimédia, les lieux, etc.. 

En tant que développeur, vous devez choisir laquelle de ces données est la plus importante pour votre application à stocker dans votre propre base de données. Une approche minimaliste peut bien vous servir. L'API de Twitter est suffisamment flexible pour que vous puissiez toujours revenir en arrière et développer (ou hydrater) les données liées aux événements que vous stockez..

Birdcage est une application gratuite basée sur Yii, à code source ouvert, qui implémente le framework API de Twitter pour les besoins de ce tutoriel. Si vous n'êtes pas familier avec Yii, veuillez lire mon introduction au framework Yii. Même si vous n'êtes pas familier avec Yii, les segments de code PHP individuels de ce tutoriel devraient être assez faciles à suivre.. 

Si vous souhaitez voir une implémentation de l'API Twitter en PHP de base, consultez 140Dev d'Adam Greene. Il a fait un excellent travail en fournissant une plate-forme de base pour l'accès aux API Twitter. Son livre Twitter API Engagement Programming propose une approche créative de l’utilisation de l’API de Twitter pour renforcer de manière organique votre influence sur Twitter.. 

Un des avantages de Birdcage et du code de la structure Yii est que nous pouvons utiliser le composant d’échafaudage de Yii, Gii, pour générer une interface utilisateur Web pour l’application de base en quelques minutes, chose que vous ne pouvez pas utiliser en PHP de base..

En tant qu'application Yii, Birdcage utilise les migrations de base de données ActiveRecord pour créer sa base de données. Les migrations de bases de données permettent de construire et d'étendre notre schéma par programme. Ceci est particulièrement utile si vous implémentez une consommation minimaliste de l'API Twitter et que vous choisissez ensuite d'étendre ce que vous collectez..

Je vais vous présenter plusieurs exemples de construction du schéma de base de données dans Yii et de la puissance de son constructeur d'échafaudage basé sur le Web, Gii..

Si vous souhaitez essayer le code Birdcage par vous-même, veuillez visiter mon site pour un aperçu complet des instructions d'installation..

Tout d'abord, nous allons créer un tableau de comptes pour stocker les jetons OAuth et les secrets de Twitter pour les comptes pour lesquels nous souhaitons nous connecter. Ces comptes sont liés à l’utilisateur enregistré dans la table des utilisateurs par notre service interne. identifiant d'utilisateur.

A partir de la ligne de commande, nous dirons à Yii de créer une nouvelle migration de table pour les comptes Twitter: ./ app / protected / yiic migrate create create_account_table.

Nous allons terminer la migration manuellement comme ceci:

tablePrefix = Yii :: app () -> getDb () -> tablePrefix; if ($ this-> tablePrefix <> ") $ this-> tableName = $ this-> tablePrefix.'account '; fonction publique safeUp () $ this-> avant (); $ this-> createTable ($ this -> nomTable, tableau ('id' => 'pk', 'id_utilisateur' => 'entier par défaut 0', 'nom_écran' => 'chaîne NOT NULL', 'oauth_token' => 'chaîne NON NULL', 'oauth_token_secret '=>' chaîne NOT NULL ',' last_checked '=>' TIMESTAMP DEFAULT 0 ',' created_at '=>' DATETIME NOT NULL DEFAULT 0 ',' modified_at '=>' TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ',), $, this-> MySqlOptions); $ this-> addForeignKey ('fk_account_user', $ this-> tableName, 'user_id', $ this-> tablePrefix.'users ',' id ',' CASCADE ',' CASCADE '); fonction publique safeDown () $ this-> before (); $ this-> dropForeignKey ('fk_account_user', $ this-> nom_table); $ this-> dropTable ($ this-> nom_table);

Pour que Yii exécute la migration qui construira la table SQL, procédez comme suit: ./ app / protected / yiic migrer

Vous verrez quelque chose comme ça:

Nous pouvons utiliser Gii, le générateur d’échafaudage basé sur le Web de Yii, pour construire nos contrôleurs de vue modèle pour la base de données..

Dans mon environnement de développement, je pointe mon navigateur Web sur localhost: 8888 / twitter / app / gii, tapez mon mot de passe Gii (enregistré dans mon twitter.ini fichier) et choisissez Générateur de modèle:

Cela ne prend qu'une seconde et devrait montrer ce message de réussite:

Le code de modèle généré par Gii peut être utilisé pour créer diverses méthodes liées à la table Account. Mais Gii peut également générer les débuts de l'interface utilisateur Web pour la gestion des comptes Twitter..

Cliquer sur Générateur Bootstrap, spécifie le Compte modèle, et Gii construira l’échafaudage de l’interface utilisateur Web de votre compte: 

Le code résultant crée une interface utilisateur de contrôleur de vue de modèle par défaut qui ressemble à ceci:

L'utilisation de Yii Active Record Migrations et de Gii permet de gagner beaucoup de temps pour la création d'une interface utilisateur Web de base. Une fois que le code d'échafaudage par défaut est en place, il est facile de le personnaliser et de l'étendre..

Ensuite, nous allons construire les tables de base de données pour stocker les données Twitter, y compris notre Twitter_Utilisateur et Tweet tables. Ici se trouve le Twitter_Utilisateur table:

 $ this-> createTable ($ this-> tableName, array ('id' => 'pk', 'twitter_user_id' => 'bigint (20) unsigned NOT NULL', 'nom_écran' => 'chaîne NOT NULL', ' name '=>' chaîne DEFAULT NULL ',' profile_image_url '=>' chaîne DEFAULT NULL ',' location '=>' chaîne DEFAULT NULL ',' url '=>' chaîne DEFAULT NULL ',' description '=>' chaîne DEFAULT NULL ',' followers_count '=>' int (10) non signé DEFAULT NULL ',' friends_count '=>' int (10) non signé DEFAULT NULL ',' statuses_count '=>' int (10) non signé DEFAULT NULL ',' time_zone '=>' chaîne DEFAULT NULL ',' created_at '=>' DATETIME PAS NULL DEFAULT 0 ',' modified_at '=>' TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ',), $ this-> MySqlOptions); $ this-> createIndex ('twitter_user_id', $ this-> tableName, 'twitter_user_id', true); 

Voici le tableau Tweet:

 $ this-> createTable ($ this-> tableName, array ('id' => 'pk', 'account_id' => 'entier par défaut 0', 'twitter_user_id' => 'bigint (20) unsigned NOT NULL', ' last_checked '=>' TIMESTAMP DEFAULT 0 ',' tweet_id '=>' BIGINT (20) unsigned NOT NULL ',' tweet_text '=>' TEXT NOT NULL ',' is_rt '=>' TINYINT DEFAULT 0 ',' created_at ' => 'DATETIME NOT NULL DEFAULT 0', 'modified_at' => 'TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP',), $ this-> MySqlOptions); $ this-> createIndex ('tweet_id', $ this-> tableName, 'tweet_id', true); $ this-> addForeignKey ('fk_tweet_account', $ this-> tableName, 'id_compte', $ this-> préfixe_table.'account ',' id ',' CASCADE ',' CASCADE '); $ this-> addForeignKey ('fk_tweet_user_id', $ this-> tableName, 'twitter_user_id', $ this-> tablePrefix.'twitter_user ',' twitter_user_id ',' CASCADE ',' CASCADE '); 

Notez que nous utilisons une relation de clé étrangère à la TwitterUtilisateur table. Gii construit intelligemment des relations pour nous dans le modèle Tweet:

 public function relations () // NOTE: vous devrez peut-être ajuster le nom de la relation et le nom de classe // correspondant aux relations générées automatiquement ci-dessous. return array ('hashtags' => array (self :: HAS_MANY, 'Hashtag', 'tweet_id'), 'mentions' => array (self :: HAS_MANY, 'Mention', 'tweet_id'), 'compte' => array (self :: BELONGS_TO, 'Account', 'account_id'), 'twitterUser' => array (self :: BELONGS_TO, 'TwitterUser', 'twitter_user_id'), 'urls' => array (self :: HAS_MANY, ' Url ',' tweet_id '),);  

Yii Active Record gère alors automatiquement les jointures pour nous. Ainsi, vous pouvez référencer les propriétés TwitterUser dans vos requêtes avec du code tel que echo $ tweet-> twitterUser-> profile_image_url.

En général, Birdcage est conçu comme un cadre simple que vous pouvez développer vous-même. Je n’ai pas tenté ici de minimiser l’espace de stockage en fonction des définitions de taille Twitter ou d’optimiser les relations au sein du schéma. Je l'ai principalement conçu pour un usage personnel.

Twitter pré-analyse les tweets dans ce qu’il appelle des entités, qui permettent de filtrer les métadonnées pour vous. Ceux-ci sont divisés en Mentions, URL et Hashtags..

Mentions

Lorsque les tweets mentionnent d’autres utilisateurs, par exemple @tommcfarlin, Twitter fournit des métadonnées décrivant ces mentions. Voici le schéma que nous allons utiliser pour les stocker:

 $ this-> createTable ($ this-> tableName, array ('id' => 'pk', 'tweet_id' => 'BIGINT (20) unsigned NOT NULL', 'source_user_id' => 'bigint (20) unsigned NOT NULL ',' target_user_id '=>' bigint (20) unsigned NOT NULL ',), $ this-> MySqlOptions); $ this-> addForeignKey ('fk_mention_tweet', $ this-> tableName, 'tweet_id', $ this-> tablePrefix.'tweet ',' tweet_id ',' CASCADE ',' CASCADE '); 

URL

Chaque fois que les tweets incluent des liens, Twitter fournit des métadonnées les répertoriant. Voici le schéma que nous allons utiliser pour stocker les URL incluses dans les tweets:

 $ this-> createTable ($ this-> tableName, array ('id' => 'pk', 'tweet_id' => 'BIGINT (20) unsigned NOT NULL', 'url' => 'chaîne NOT NULL',) , $ this-> MySqlOptions); $ this-> addForeignKey ('fk_url_tweet', $ this-> tableName, 'tweet_id', $ this-> tablePrefix.'tweet ',' tweet_id ',' CASCADE ',' CASCADE '); 

Hashtags

Chaque fois que les tweets incluent des hashtags, par ex. #php, Twitter fournit des métadonnées les décrivant. Voici le schéma que nous allons utiliser pour stocker les hashtags inclus dans les tweets:

 $ this-> createTable ($ this-> tableName, array ('id' => 'pk', 'tweet_id' => 'BIGINT (20) unsigned NOT NULL', 'tag' => 'chaîne NOT NULL',) , $ this-> MySqlOptions); $ this-> addForeignKey ('fk_hashtag_tweet', $ this-> tableName, 'tweet_id', $ this-> tablePrefix.'tweet ',' tweet_id ',' CASCADE ',' CASCADE '); 

Ces migrations construisent les tables primaires avec lesquelles nous allons stocker les données de l'API Twitter..

Dans le code Birdcage, vous verrez qu'il existe également une variété d'autres migrations; la plupart d'entre eux soutiennent l'application plus large.

Construire l'application Birdcage

Vous devez enregistrer une application sur Twitter pour obtenir vos premières clés d'application OAuth. Visitez le site Twitter pour les développeurs et cliquez sur Gérer vos applications. Cliquez sur Créer de nouvelles applications; J'appelle le mien le framework Twitter pour Yii:

L'URL de rappel pour utiliser Birdcage doit être http://votredomaine.com/twitter/callback. C'est l'adresse à laquelle Twitter renverra les demandes OAuth. C'est également l'adresse dans Birdcage de notre contrôleur Twitter pour les appels d'API.

Au cours du processus de création, vous devez configurer les autorisations de l'application (utiliser en lecture et en écriture pour Birdcage) et prendre des notes sur la clé et le secret OAuth de l'application:

Voici à quoi ressemblera la page des clés d'API. La clé et le secret principaux de l’API seront nécessaires pour configurer Birdcage dans un premier temps:

Une fois que vous avez ajouté l'application, vous la verrez dans le menu de l'application Twitter:

Une fois le code installé, vous devez initialiser la base de données MySQL en exécutant les migrations. Je fais cela en deux étapes.

Tout d'abord, je lance la migration Yii-User. C'est une extension pour Yii qui gère la plupart de mes besoins de connexion et d'enregistrement:

./ app / protected / yiic migrate --migrationPath = application.modules.user.migrations

La migration vous demandera de créer des informations d'identification pour votre compte d'utilisateur principal pour l'application Web:

Login administrateur [admin]: Adresse électronique de l'administrateur [[email protected]]: Mot de passe de l'administrateur [admin]:

C'est le compte que vous utiliserez pour vous connecter à l'application Web Birdcage, pas les informations d'identification de votre compte Twitter..

Ensuite, je lance le reste des migrations: ./ app / protected / yiic up

Une fois que vous avez configuré Birdcage, visitez votre site dans votre navigateur Web, par exemple. http://birdcage.votredomaine.com.

Une fois que vous vous êtes connecté, il vous sera demandé de saisir les clés OAuth de votre application et l'adresse du contrôleur Twitter, par exemple. http://votredomaine.com/twitter (uniquement le contrôleur, pas le rappel) indiqué dans les images ci-dessus:

Maintenant, nous sommes sur le point de faire des choses intéressantes. 

Conclusion

Restez à l'écoute pour la deuxième partie de ce tutoriel. La deuxième partie couvre: 

  1. Authentification utilisateur OAuth
  2. traitement des tweets en arrière-plan
  3. poster sur Twitter

Ensuite, dans la troisième partie, nous examinerons l’utilisation de l’API Twitter Streaming et de l’implémentation open source Phirehose Stream. Tandis que la deuxième partie traite les tweets à l’aide de l’API REST, la troisième partie décrira comment établir une connexion permanente avec le flux de données Twitter..

J'espère que vous avez trouvé cela utile. S'il vous plaît poster des commentaires, des corrections ou des idées supplémentaires ci-dessous. Vous pouvez parcourir mes autres tutoriels Tuts + sur ma page d’auteur ou me suivre sur Twitter @reifman.