Référencement technique

L’API Moz Links : une introduction

Qu’est-ce qu’une API ? Ce sont ces choses que vous copiez et collez de longs codes étranges dans Screaming Frog pour obtenir des données de liens sur une exploration de site, n’est-ce pas ?

Je suis ici pour vous dire qu’il y a tellement plus que cela – si vous êtes prêt à faire quelques petits pas. Mais d’abord, quelques bases.

Qu’est-ce qu’une API ?

API signifie “interface de programmation d’application”, et c’est juste la façon de… utiliser une chose. Tout a une API. Le Web est une API géante qui prend des URL en entrée et renvoie des pages.

Mais les services de données spéciaux comme l’API Moz Links ont leur propre ensemble de règles. Ces règles varient d’un service à l’autre et peuvent constituer une pierre d’achoppement majeure pour les personnes qui passent à l’étape suivante.

Lorsque Screaming Frog vous donne les colonnes de liens supplémentaires dans une analyse, il utilise l’API Moz Links, mais vous pouvez avoir cette capacité n’importe où. Par exemple, toutes les tâches manuelles fastidieuses que vous effectuez dans les environnements de feuilles de calcul peuvent être automatisées, de l’extraction de données au formatage et à l’envoi d’un rapport par e-mail.

Si vous franchissez cette étape suivante, vous pouvez être plus efficace que vos concurrents, en concevant et en fournissant vos propres services de référencement au lieu de compter sur, de payer et d’être limité par la prochaine intégration de produits propriétaires.

GET ou POST

La plupart des API que vous rencontrerez utilisent le même mécanisme de transport de données que le Web. Cela signifie qu’une URL est impliquée, tout comme un site Web. N’ayez pas peur ! C’est plus facile que vous ne le pensez. À bien des égards, l’utilisation d’une API est similaire à l’utilisation d’un site Web.

Comme pour le chargement de pages Web, la demande peut se trouver à l’un des deux endroits suivants : l’URL elle-même ou dans le corps de la demande. L’URL est appelée le “point de terminaison” et la partie supplémentaire de la demande souvent soumise de manière invisible est appelée la “charge utile” ou les “données”. Lorsque les données se trouvent dans l’URL, elles sont appelées “chaîne de requête” et indiquent que la méthode “GET” est utilisée. Vous voyez ceci tout le temps lorsque vous effectuez une recherche :

https://www.google.com/search?q=moz+links+api <-- GET method 

Lorsque les données de la requête sont masquées, on parle de requête « POST ». Vous voyez cela lorsque vous soumettez un formulaire sur le Web et que les données soumises ne s’affichent pas sur l’URL. Lorsque vous appuyez sur le bouton de retour après un tel POST, les navigateurs vous avertissent généralement contre les doubles soumissions. La raison pour laquelle la méthode POST est souvent utilisée est que vous pouvez adapter beaucoup plus de choses à la requête en utilisant la méthode POST qu’avec la méthode GET. Sinon, les URL deviendraient très longues. L’API Moz Links utilise la méthode POST.

Faire des demandes

Un navigateur Web est ce qui fait traditionnellement des requêtes de sites Web pour des pages Web. Le navigateur est un type de logiciel connu sous le nom de client. Ce sont les clients qui font les demandes de services. Plus que de simples navigateurs peuvent faire des demandes. La possibilité de faire des requêtes Web client est souvent intégrée dans des langages de programmation comme Python, ou peut être décomposée en un outil autonome. Les outils les plus populaires pour effectuer des requêtes en dehors d’un navigateur sont boucle et wget.

Nous parlons de Python ici. Python a une bibliothèque intégrée appelée URLLIB, mais elle est conçue pour gérer tellement de types de requêtes différents qu’il est un peu pénible à utiliser. Il existe d’autres bibliothèques plus spécialisées pour effectuer des requêtes d’API. Le plus populaire pour Python s’appelle demandes. Il est si populaire qu’il est utilisé pour presque tous les didacticiels de l’API Python que vous trouverez sur le Web. Je vais donc l’utiliser aussi. Voici à quoi ressemble “frapper” l’API Moz Links :

response = requests.post(endpoint, data=json_string, auth=auth_tuple)

Étant donné que tout a été configuré correctement (plus d’informations à ce sujet bientôt), cela produira la sortie suivante :

{'next_token': 'JYkQVg4s9ak8iRBWDiz1qTyguYswnj035nqrQ1oIbW96IGJsb2dZgGzDeAM7Rw==',   'results': [{'anchor_text': 'moz',                'external_pages': 7162,                'external_root_domains': 2026}]}  

C’est JSON données. Il est contenu dans l’objet de réponse renvoyé par l’API. Ce n’est pas sur le lecteur ou dans un fichier. C’est en mémoire. Tant qu’il est en mémoire, vous pouvez faire des choses avec (souvent simplement l’enregistrer dans un fichier).

Si vous vouliez saisir une donnée dans une telle réponse, vous pourriez vous y référer comme ceci :

response['results'][0]['external_pages']

Cela dit : “Donnez-moi le premier élément de la résultats liste, puis donnez-moi le pages_externes valeur de cet article. Le résultat serait 7162.

NOTE: Si vous suivez réellement l’exécution du code, la ligne ci-dessus ne fonctionnera pas seule. Il y a une certaine quantité de configuration que nous ferons sous peu, y compris l’installation de la bibliothèque de requêtes et la configuration de quelques variables. Mais c’est l’idée de base.

JSON

JSON signifie JavaScript Object Notation. C’est une façon de représenter les données d’une manière facile à lire et à écrire pour les humains. Il est également facile pour les ordinateurs de lire et d’écrire. C’est un format de données très courant pour les API qui a quelque peu conquis le monde depuis que les anciennes méthodes étaient trop difficiles à utiliser pour la plupart des gens. Certaines personnes pourraient appeler cette partie du mouvement API “repos”, mais le format XML beaucoup plus difficile est également considéré comme “reposant” et chacun semble avoir sa propre interprétation. Par conséquent, je trouve préférable de me concentrer uniquement sur JSON et sur la manière dont il entre et sort de Python.

Dictionnaires Python

Je t’ai menti. J’ai dit que la structure de données que vous examiniez ci-dessus était JSON. Techniquement, c’est vraiment un dictionnaire Python ou dict objet de type de données. C’est un type spécial d’objet en Python conçu pour contenir des paires clé/valeur. Les clés sont des chaînes et les valeurs peuvent être n’importe quel type d’objet. Les clés sont comme les noms de colonne dans une feuille de calcul. Les valeurs sont comme les cellules de la feuille de calcul. De cette façon, vous pouvez considérer un dict Python comme un objet JSON. Par exemple, voici la création d’un dict en Python :

my_dict = {      "name": "Mike",      "age": 52,      "city": "New York"  }

Et voici l’équivalent en JavaScript :

var my_json = {      "name": "Mike",      "age": 52,      "city": "New York"  }

A peu près la même chose, non ? Regarder attentivement. Les noms de clé et les valeurs de chaîne reçoivent des guillemets doubles. Les chiffres non. Ces règles s’appliquent de manière cohérente entre les dicts JSON et Python. Donc, comme vous pouvez l’imaginer, il est facile pour les données JSON d’entrer et de sortir de Python. C’est un grand cadeau qui a rendu le travail API moderne hautement accessible au débutant grâce à un outil qui a révolutionné le domaine de la science des données et fait des percées dans le marketing, Cahiers Jupyter.

Aplatir les données

Mais méfiez-vous! Au fur et à mesure que les données circulent entre les systèmes, il n’est pas rare que les données changent subtilement. Par exemple, les données JSON ci-dessus peuvent être converties en chaîne. Les chaînes peuvent ressembler exactement à JSON, mais elles ne le sont pas. Ce ne sont que des personnages. Parfois, vous l’entendrez appeler “sérialisation” ou “aplatissement”. C’est un point subtil, mais qui mérite d’être compris car il aidera à résoudre l’un des plus grands obstacles avec les API Moz Links (et la plupart des API JSON).

Les objets ont des API

Réel JSON ou dict les objets ont leurs propres petites API pour accéder aux données qu’ils contiennent. La possibilité d’utiliser ces API JSON et dict disparaît lorsque les données sont aplaties dans une chaîne, mais elles se déplaceront plus facilement entre les systèmes, et lorsqu’elles arriveront à l’autre bout, elles seront “désérialisées” et l’API reviendra sur l’autre système.

Données circulant entre les systèmes

C’est le concept de données portables et interopérables. À l’époque où cela s’appelait l’échange de données informatisé (ou EDI), c’était très important. Puis vint le Web, puis XML, puis JSON et maintenant c’est juste une partie normale de faire des affaires.

Si vous êtes en Python et que vous souhaitez convertir un dict en une chaîne JSON aplatie, procédez comme suit :

import json    my_dict = {      "name": "Mike",      "age": 52,      "city": "New York"  }    json_string = json.dumps(my_dict)

…ce qui produirait la sortie suivante :

'{"name": "Mike", "age": 52, "city": "New York"}'

Cela ressemble presque au dict d’origine, mais si vous regardez attentivement, vous pouvez voir que des guillemets simples sont utilisés autour de l’ensemble. Une autre différence évidente est que vous pouvez envelopper de vraies données structurées pour plus de lisibilité sans aucun effet néfaste. Vous ne pouvez pas le faire si facilement avec des cordes. C’est pourquoi il est présenté sur une seule ligne dans l’extrait ci-dessus.

Tel stringifier les processus sont effectués lors de la transmission de données entre différents systèmes car ils ne sont pas toujours compatibles. Les chaînes de texte normales, en revanche, sont compatibles avec presque tout et peuvent être transmises facilement aux requêtes Web. Ces chaînes aplaties de données JSON sont souvent appelées la demande.

Anatomie d’une demande

Encore une fois, voici l’exemple de demande que nous avons fait ci-dessus :

response = requests.post(endpoint, data=json_string, auth=auth_tuple)

Maintenant que vous comprenez ce que le nom de la variable json_string vous dit à propos de son contenu, vous ne devriez pas être surpris de voir comment nous remplissons cette variable :

 data_dict = {      "target": "moz.com/blog",      "scope": "page",      "limit": 1  }    json_string = json.dumps(data_dict)

…et le contenu de json_string ressemble à ceci :

'{"target": "moz.com/blog", "scope": "page", "limit": 1}'

C’est l’une de mes principales découvertes dans l’apprentissage de l’API Moz Links. Ceci est en commun avec d’innombrables autres API, mais me fait trébucher à chaque fois car il est tellement plus pratique de travailler avec des dicts structurés qu’avec des chaînes aplaties. Cependant, la plupart des API s’attendent à ce que les données soient une chaîne pour la portabilité entre les systèmes, nous devons donc les convertir au dernier moment avant que l’appel d’API réel ne se produise.

Chargements et vidages pythoniques

Maintenant, vous vous demandez peut-être dans cet exemple ci-dessus, ce que fait un vidage au milieu du code. Le json.dumps() La fonction est appelée “dumper” car elle prend un objet Python et le vide dans une chaîne. Le json.loads() La fonction est appelée “chargeur” ​​car elle prend une chaîne et la charge dans un objet Python.

La raison de ce qui semble être des options au singulier et au pluriel sont en fait des options binaires et de chaîne. Si vos données sont binaires, vous utilisez json.load() et json.dump(). Si vos données sont une chaîne, vous utilisez json.loads() et json.dumps(). Le s signifie chaîne. Laisser le s désactivé signifie binaire.

Ne laissez personne vous dire que Python est parfait. C’est juste que ses bords rugueux ne sont pas excessivement répréhensibles.

Affectation vs égalité

Pour ceux d’entre vous qui découvrent complètement Python ou la programmation en général, ce que nous faisons lorsque nous accédons à l’API s’appelle une affectation. Le résultat de demandes.post() est affecté à la variable nommée réponse.

response = requests.post(endpoint, data=json_string, auth=auth_tuple)

Nous utilisons le signe = pour attribuer la valeur du côté droit de l’équation à la variable du côté gauche de l’équation. La variable réponse est maintenant une référence à l’objet renvoyé par l’API. L’affectation est différente de l’égalité. Le == signe est utilisé pour l’égalité.

# This is assignment:  a = 1  # a is now equal to 1    # This is equality:  a == 1  # True, but relies that the above line has been executed

La méthode POST

response = requests.post(endpoint, data=json_string, auth=auth_tuple)  

Le demandes bibliothèque a une fonction appelée poste() qui prend 3 arguments. Le premier argument est l’URL du point de terminaison. Le deuxième argument est les données à envoyer au point de terminaison. Le troisième argument correspond aux informations d’authentification à envoyer au point de terminaison.

Paramètres de mots-clés et leurs arguments

Vous remarquerez peut-être que certains des arguments poste() fonction ont des noms. Les noms sont définis égaux aux valeurs à l’aide du signe =. Voici comment les fonctions Python sont définies. Le premier argument est positionnel à la fois parce qu’il vient en premier et aussi parce qu’il n’y a pas de mot-clé. Les arguments avec mots-clés viennent après les arguments dépendant de la position. Croyez-moi, tout prend sens au bout d’un moment. Nous commençons tous à penser comme Guido van Rossum.

def arbitrary_function(argument1, name=argument2):      # do stuff  

Le nom dans l’exemple ci-dessus est appelé un “mot clé” et les valeurs qui arrivent à ces emplacements sont appelées des “arguments”. Désormais, les arguments sont affectés aux noms de variables directement dans la définition de la fonction, vous pouvez donc faire référence à argument1 ou argument2 n’importe où dans cette fonction. Si vous souhaitez en savoir plus sur les règles des fonctions Python, vous pouvez en savoir plus ici.

Paramétrage de la demande

D’accord, alors laissez-vous faire tout le nécessaire pour cela succès assuré moment. Nous avons montré la requête de base :

response = requests.post(endpoint, data=json_string, auth=auth_tuple)

…mais nous n’avons pas montré tout ce qui s’y rapporte. Faisons cela maintenant. Si vous suivez et que la bibliothèque de requêtes n’est pas installée, vous pouvez le faire avec la commande suivante à partir du même environnement de terminal à partir duquel vous exécutez Python :

pip install requests

Souvent, Jupyter aura déjà installé la bibliothèque de requêtes, mais si ce n’est pas le cas, vous pouvez l’installer avec la commande suivante depuis une cellule Notebook :

!pip install requests

Et maintenant, nous pouvons tout assembler. Il n’y a que peu de choses ici qui sont nouvelles. Le plus important est de savoir comment nous prenons 2 variables différentes et les combinons en une seule variable appelée AUTH_TUPLE. Vous devrez obtenir votre propre ACCESSID et SECRETKEY sur le site Web Moz.com.

L’API s’attend à ce que ces deux valeurs soient transmises sous la forme d’une structure de données Python appelée tuple. Un tuple est une liste de valeurs qui ne changent pas. je trouve intéressant que demandes.post() attend des chaînes aplaties pour le données paramètre, mais attend un tuple pour le authentification paramètre. Je suppose que cela a du sens, mais ce sont les choses subtiles à comprendre lorsque vous travaillez avec des API.

Voici le code complet :

import json  import pprint  import requests    # Set Constants  ACCESSID = "mozscape-1234567890"  # Replace with your access ID  SECRETKEY = "1234567890abcdef1234567890abcdef"  # Replace with your secret key  AUTH_TUPLE = (ACCESSID, SECRETKEY)    # Set Variables  endpoint = "https://lsapi.seomoz.com/v2/anchor_text"  data_dict = {"target": "moz.com/blog", "scope": "page", "limit": 1}  json_string = json.dumps(data_dict)    # Make the Request  response = requests.post(endpoint, data=json_string, auth=AUTH_TUPLE)    # Print the Response  pprint(response.json())

… qui produit :

{'next_token': 'JYkQVg4s9ak8iRBWDiz1qTyguYswnj035nqrQ1oIbW96IGJsb2dZgGzDeAM7Rw==',   'results': [{'anchor_text': 'moz',                'external_pages': 7162,                'external_root_domains': 2026}]}  

Utilisation de toutes les majuscules pour le AUTH_TUPLE variable est une convention que beaucoup utilisent en Python pour indiquer que la variable est une constante. Ce n’est pas une obligation, mais c’est une bonne idée de suivre les conventions quand vous le pouvez.

Vous remarquerez peut-être que je n’ai pas utilisé toutes les majuscules pour le point final variable. C’est parce que le texte_ancre point final n’est pas une constante. Il existe un certain nombre de points de terminaison différents qui peuvent prendre sa place en fonction du type de recherche que nous voulions faire. Les choix sont :

  1. texte_ancre

  2. redirection_finale

  3. global_top_pages

  4. global_top_root_domains

  5. index_metadata

  6. lien_intersection

  7. état_lien

  8. linking_root_domains

  9. liens

  10. top_pages

  11. url_metrics

  12. des données d’utilisation

Et cela mène au Jupyter Notebook que j’ai préparé sur ce sujet situé ici sur Github. Avec ce Notebook, vous pouvez étendre l’exemple que j’ai donné ici à l’un des 12 points de terminaison disponibles pour créer une variété de livrables utiles, qui feront l’objet d’articles à suivre.

(Article traduit de moz.com)

Articles similaires

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Bouton retour en haut de la page
Index