Communiquer avec l'API du plugin WordPress.org

Au cours des dernières semaines, je me suis demandé comment puiser des données sur mes plugins hébergés sur WordPress.org et les afficher sur mon site Web. La première chose qui me vint à l’esprit fut «Web Scraping», mais franchement, c’est beaucoup de travail, on a l’impression de remonter dans le temps et ce n’est pas un bon citoyen du Web. Dans certains cas, il pourrait être illégal.

Je suis ensuite tombé sur un plugin appelé "I Make Plugins", développé par Mark Jaquith, qui voulait juste que je veuille récupérer les données du readme.txt fichier d'un plugin. Cela fonctionne très bien, mais puisque WordPress nous permet de rechercher des plugins directement à partir du backend et de voir nos plugins préférés, je savais qu’il existait un meilleur moyen (ou le WordPress Way) et que des recherches plus poussées m’ont conduit à l’API WordPress.org. Aucune documentation détaillée sur cette page, mais suffisamment pour commencer à savoir qu'il existe une API pour le faire plus efficacement..


WordPress.org Plugins API

L'URL où tous les appels liés à la recherche / mise à jour du plugin sont effectués est http://api.wordpress.org/plugins/info/1.0/. Pour avoir une idée rapide de la façon dont cela fonctionne, ouvrez ce lien dans un navigateur et ajoutez votre slug de plugin à la fin, par exemple. http://api.wordpress.org/plugins/info/1.0/custom-favicon/ et voir ce qui est retourné.

Cette requête GET basée sur un navigateur affiche toutes les informations de plug-in pour le plug-in "Custom Favicon" dans le format ci-dessous. En remplaçant le dernier chemin de l'URL par le slug de votre plugin, vous pourrez voir les détails spécifiques à votre plugin..

O: 8: "stdClass": 20: s: 4: "nom"; s: 14: "Favicon personnalisé"; s: 4: "slug"; s: 14: "custom-favicon"; s: 7: "version"; s: 3: "1.0"; s: 6: "auteur"; s: 80: "Thèmes de Dreams Online"; s: 14: "author_profile"; s: 38: "http: //profiles.wordpress .org / hchouhan "; s: 12:" contributeurs "; a: 3: s: 8:" hchouhan "; s: 38:" http://profiles.wordpress.org/hchouhan "; s: 12:" dreamsonline "; s: 42:" http://profiles.wordpress.org/dreamsonline "; s: 11:" dreamsmedia "; s: 41:" http://profiles.wordpress.org/dreamsmedia "; s: 8: "nécessite"; s: 3: "3.5"; s: 6: "testé"; s: 5: "3.5.2"; s: 13: "compatibilité"; a: 2: s: 5: " 3.5.1 "; a: 1: s: 3:" 1.0 "; a: 3: i: 0; i: 100; i: 1; i: 5; i: 2; i: 5; s : 3: "3,6"; a: 1: s: 3: "1,0"; a: 3: i: 0; i: 100; i: 1; i: 1; i: 2; i: 1;  s: 6: "rating"; d: 100; s: 11: "num_ratings"; i: 3; s: 10: "téléchargé"; i: 1995; s: 12: "last_updated"; s: 10: "2013-05-27"; s: 5: "ajouté"; s: 10: "2013-05-27"; s: 8: "page d'accueil"; s: 61: "http://www.dreamsonline.net / wordpress-plugins / custom-favicon / "; s: 8:" sections "; a: 4: s: 11:" description "; s: 594:"

Maintenant, téléchargez facilement une icône tactile et favicon pour votre site Web WordPress et votre tableau de bord.

Signalez tous les bugs trouvés via http://www.dreamsonline.net/wordpress-plugins/custom-favicon/

Mes liens

  • Twitter @harishchouhan
  • Google+ Harish Chouhan

Pas très présentable, mais bon, au moins, c'est un bon début pour tester si l'API fournit des informations de plugin rapidement, que nous pourrons ensuite afficher comme nous aimons..

Jusque-là, la plupart de ce que je faisais était basé sur des essais aléatoires. La seule ressource que j'ai pu trouver est http://dd32.id.au/projects/wordpressorg-plugin-information-api-docs/ qui essaie d'expliquer les différentes options et arguments pouvant être utilisés lors de la communication avec cette API..

Donc comment ça fonctionne?

Pour communiquer avec http://api.wordpress.org/plugins/info/1.0/ et récupérer des informations, vous devez créer un $ POST demande avec 2 choses:

  1. Post Action - comme, $ _POST ['action']
  2. Corps de poste - tel que, $ _POST ['body'], qui doit être un objet sérialisé

Les données renvoyées par l'API sont un objet dans tous les cas (sauf lorsque vous visitez le lien de l'API depuis un navigateur). Même en cas d'erreur, les données renvoyées sont toujours un objet mais avec une seule propriété, une chaîne d'erreur.

Ma première tentative de récupération d'informations de plug-in ressemblait à l'exemple ci-dessous:

Exemple d’informations de plug-in de retriving utilisant wp_remote_post API HTTP

 'favicon'); $ request = array ('action' => 'plugin_information', 'timeout' => 15, 'request' => serialize ($ args)); $ url = 'http://api.wordpress.org/plugins/info/1.0/'; $ response = wp_remote_post ($ url, array ('body' => $ request)); $ plugin_info = unserialize ($ response ['body']); écho '
'. print_r ($ plugin_info, true). '
'; ?>

Nous expliquerons le code plus tard, mais pour l'instant, l'exemple de code ci-dessus renverra des informations sur notre plug-in dans le format indiqué ci-dessous, dans le cas où tout fonctionnerait comme prévu:

Objet stdClass ([name] => Favicon personnalisé [slug] => custom-favicon [version] => 1.0 [auteur] => Thèmes Dreams Online [author_profile] => http://profiles.wordpress.org/hchouhan [contributeurs ] => Array ([hchouhan] => http://profiles.wordpress.org/hchouhan [dreamsonline] => http://profiles.wordpress.org/dreamsonline [dreamsmedia] => http: //profiles.wordpress. org / dreamsmedia) [requiert] => 3.5 [testé] => 3.5.2 [compatibilité] => Tableau ([3.6] => Tableau ([1.0] => Tableau ([0] => 100 [1] => 1 [2] => 1))) [rating] => 100 [num_ratings] => 3 [téléchargé] => 2008 [last_updated] => 2013-05-27 [ajouté] => 2013-05-27 [page d'accueil ] => http://www.dreamsonline.net/wordpress-plugins/custom-favicon/ [sections] => Array ([description] => Téléchargez maintenant facilement une icône de favicon et de pomme tactile pour votre site Web WordPress et votre tableau de bord. Signalez tous les bugs que vous avez trouvés via http://www.dreamsonline.net/wordpress-plugins/custom-favicon/ Mes liens Twitter @harishchouhan Google+ Harish Chouhan Si vous aimez le plugin, s'il vous plaît envisager de le noter et en cliquant sur le bouton "ça marche". [installation] => Téléchargez le répertoire / custom-favicon / dans / wp-content / plugins / directory Activez le plugin via le menu "Plugins" de WordPress Cliquez sur le sous-menu "Custom Favicon" dans le menu Paramètres et téléchargez votre favicon. [changelog] => = 1.0.0 * Ceci est la première version [faq] => Consultez la FAQ officielle "Custom Favicon". Vous pouvez également visiter le centre de support et lancer une discussion si nécessaire. ) [download_link] => http://downloads.wordpress.org/plugin/custom-favicon.zip [tags] => Array ([admin] => admin [apple-touch] => apple touch [apple-touch- icône] => icône Apple Touch [blog] => blog [favicon] => favicon [icône] => icône [iphone] => iphone [thème] => thème [upload] => upload [wordpress] => wordpress) [donate_link] => http://www.dreamsonline.net)

Si vous voulez juste afficher le nombre de téléchargements, vous pouvez ajouter ceci:

écho '

Téléchargé: '. print_r ($ plugin_info-> téléchargé, true). 'fois

';

Remarque: Ceci est juste un exemple de test et n'est pas destiné à être utilisé dans des projets réels car il n'y a pas de vérification d'erreur. Si le slug est incorrect ou si la connexion à WordPress.org n’est pas établie, le code ci-dessus affichera des erreurs..

Nous pouvons continuer à étendre cet exemple en vérifiant les erreurs, mais existe-t-il un meilleur moyen? Et la réponse est Oui, avec le plugins_api une fonction.


le plugins_api Une fonction

le plugins_api la fonction est définie dans wp-admin / comprend /plugin_install.php.

per_page)) $ args-> per_page = 24; // Permet à un plugin de remplacer entièrement l'API WordPress.org. // Utilisez le filtre 'plugins_api_result' pour simplement ajouter des résultats. // Veuillez vous assurer qu'un objet est renvoyé à partir des filtres suivants. $ args = apply_filters ('plugins_api_args', $ args, $ action); $ res = apply_filters ('plugins_api', false, $ action, $ args); if (false === $ res) $ url = 'http://api.wordpress.org/plugins/info/1.0/'; if (wp_http_supports (array ('ssl')))) $ url = set_url_scheme ($ url, 'https'); $ request = wp_remote_post ($ url, array ('timeout' => 15, 'body' => array ('action' => $ action, 'request' => serialize ($ args)))); if (is_wp_error ($ request)) $ res = new WP_Error ('plugins_api_failed', __ ('Une erreur inattendue s'est produite. Quelque chose ne va pas avec WordPress.org ou la configuration de ce serveur. Si vous continuez à avoir des problèmes, veuillez essayer le forums d'assistance. '), $ request-> get_error_message ());  else $ res = peut-être_unserialize (wp_remote_retrieve_body ($ request)); if (! is_object ($ res) &&! is_array ($ res)) $ res = new WP_Error ('plugins_api_failed', __ ('Une erreur inattendue s'est produite. Quelque chose ne va pas avec WordPress.org ou la configuration de ce serveur. Si vous continuez pour avoir des problèmes, veuillez essayer les forums de support. '), wp_remote_retrieve_body ($ request));  elseif (! is_wp_error ($ res)) $ res-> external = true;  return apply_filters ('plugins_api_result', $ res, $ action, $ args); ?>

Paramètres

le plugins_api la fonction accepte 2 paramètres: $ action et $ args:

1. Le $ action Paramètre

Qui peut être l’une de ces 3 options ci-dessous:

  1. query_plugins
  2. plugin_information
  3. hot_tags

2. Le $ args Paramètre

Les arguments sont facultatifs et, s'ils sont définis, doivent être un objet sérialisé. Les arguments pour chaque action sont différents et sont expliqués en détail plus loin dans cet article..

Données retournées

Les données renvoyées dépendent de l'action choisie. L'action "plugin_information"renvoie un seul objet alors que les deux autres actions renvoient un tableau d'objets. En cas d'erreur telle que l'absence d'action ou le paramètre slug, la plugin_api La fonction retourne également un objet avec une propriété unique "erreur" et une valeur (chaîne) "Slug non fourni" ou "action non implémentée".

Un exemple d'utilisation plugins_api Une fonction

Nous allons maintenant essayer le même exemple que nous avons utilisé plus tôt, mais en utilisant le plugins_api fonction au lieu de wp_remote_post de l'API HTTP.

 'favicon')); / ** Vérifier les erreurs et afficher les résultats * / if (is_wp_error ($ call_api)) echo '
'. print_r ($ call_api-> get_error_message (), true). '
'; else echo '
'. print_r ($ call_api, true). '
'; if (! empty ($ call_api-> téléchargé)) echo '

Téléchargé: '. print_r ($ call_api-> téléchargé, true). 'fois.

'; ?>

Le code ci-dessus renverra les données de la même manière que notre exemple précédent. Comme vous pouvez le constater, cela nécessite quelques lignes de code et une connexion à l’API du plugin WordPress.org, la non-sérialisation de l’objet renvoyé et la vérification des erreurs initiales sont gérées par le plugins_api une fonction.

Dans les deux exemples ci-dessus, nous n’utilisons que le "plugin_information"action et un slug sans autres arguments car notre intention était simplement de récupérer toutes les informations possibles sur notre plugin.

2.1 Arguments pour query_plugins

2.1.1. Feuilleter

Il affiche la liste similaire à http://wordpress.org/plugins/browse/popular/. Les valeurs possibles sont:

  • populaire
  • Nouveau
  • mis à jour
  • les mieux notés

2.1.2. chercher

Le terme à rechercher.

2.1.3. étiquette

Rechercher des plugins par un tag.

2.1.4. auteur

Rechercher des plugins d'un auteur.

Remarque: Entre Feuilleter, chercher, étiquette et auteur un seul argument peut être utilisé à la fois.

2.1.5. page (optionnel)

Le numéro de page des résultats.

2.1.6. par page (optionnel)

Le nombre de résultats à afficher par page.

2.1.7. des champs (optionnel)

Semblable à plugin_information champs énumérés ci-dessous.

Exemple de requête pour les plugins les plus populaires:

 $ call_api = plugins_api ('query_plugins', array ('parcourir' => 'top-rated', 'page' => '1', 'per_page' => '5', 'champs' => array ('téléchargé' => false, 'rating' => false, 'description' => false, 'short_description' => false, 'donate_link' => false, 'tags' => false, 'sections' => false, 'homepage' = > false, 'ajouté' => false, 'last_updated' => false, 'compatibilité' => false, 'testé' => false, 'require' => false, 'downloadlink' => true,)));

Retourne un tableau d'objets similaire à quoi plugin_information résultats.

2.2 Arguments pour plugin_information

2.2.1. limace

Le slug du plugin pour lequel nous devons renvoyer des informations.

2.2.2. des champs (optionnel)

Par défaut, tous les champs de la readme.txt sont affichés avec quelques champs supplémentaires tels que le nombre total de téléchargements, la classification et le lien de téléchargement. Cependant, si vous n’avez besoin que de récupérer quelques champs, vous pouvez le remplacer en envoyant un tableau de paires clé / valeur, où le champ est la clé et true / false comme valeur, selon que vous souhaitiez que le champ soit renvoyé ou non. ne pas.

Exemple de champs de substitution:

 / ** Préparer notre requête * / $ call_api = plugins_api ('plugin_information', array ('slug' => 'custom-favicon', 'fields' => array ('téléchargé' => false, 'rating' => false ,)));

Les champs pouvant être remplacés sont:

  • ajoutée
  • compatibilité
  • lien de téléchargement (Remarque: la clé réelle est "lien de téléchargement"mais pour ne pas renvoyer ces données, nous devons définir le champ comme" lien de téléchargement ")
  • donate_link
  • page d'accueil
  • dernière mise à jour
  • évaluation
  • exiger
  • sections
  • Mots clés
  • testé

2.3 Arguments pour hot_tags

2.3.1. nombre

Le nombre de tags à renvoyer. La valeur par défaut est 100.

hot_tags exemple d'action:

 / ** Préparez notre requête * / $ call_api = plugins_api ('hot_tags', array ('number' => '50',));

Cela retournera un tableau d'objets avec la clé étant la balise slug et chaque objet contiendrait:

  • Nom du tag
  • Tag Slug
  • Count - Le nombre de plugins marqués avec cette balise

Résumé

En interne, le noyau WordPress utilise le plugins_api fonction pour afficher une liste des plugins en fonction du mot clé utilisé pour la recherche, pour récupérer vos plugins préférés et pour afficher des informations sur un plugin spécifique. En modifiant le paramètre d'action, vous pouvez utiliser la fonction pour effectuer différentes tâches..

Les informations sur l'API WordPress.org ne sont pas largement disponibles et la raison pourrait en être d'éviter les abus du système. Assurez-vous donc que vos requêtes à l'API WordPress.org sont limitées et effectuées de la bonne manière. Utilisez Transitoires pour mettre les données en cache afin de ne pas avoir à faire de demande à chaque chargement de page..

Dans un prochain tutoriel, nous créerons un plugin avec un shortcode pour afficher le nombre de téléchargements de votre plugin..