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..
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/
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..
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:
$ _POST ['action']
$ _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:
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.
plugins_api
Une fonctionle 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); ?>
le plugins_api
la fonction accepte 2 paramètres: $ action
et $ args
:
$ action
ParamètreQui peut être l’une de ces 3 options ci-dessous:
query_plugins
plugin_information
hot_tags
$ args
ParamètreLes 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..
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".
plugins_api
Une fonctionNous 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.
query_plugins
Feuilleter
Il affiche la liste similaire à http://wordpress.org/plugins/browse/popular/. Les valeurs possibles sont:
populaire
Nouveau
mis à jour
les mieux notés
chercher
Le terme à rechercher.
étiquette
Rechercher des plugins par un tag.
auteur
Rechercher des plugins d'un auteur.
Remarque: Entre Feuilleter
, chercher
, étiquette
et auteur
un seul argument peut être utilisé à la fois.
page
(optionnel)Le numéro de page des résultats.
par page
(optionnel)Le nombre de résultats à afficher par page.
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.
plugin_information
limace
Le slug du plugin pour lequel nous devons renvoyer des informations.
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é
hot_tags
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:
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..