[PYTHON] Comment obtenir des données d'article à l'aide de l'API Qiita

introduction

[Premier poste] Je voulais obtenir l'article dans Qiita en spécifiant la balise, donc je l'ai implémenté en Python. La raison pour laquelle j'y ai travaillé en premier lieu était que j'utilisais le Livedoor News Corpus pour classer les catégories d'articles par apprentissage automatique, et on m'a dit que j'aimerais faire de même avec les articles Qiita. .. .. Il peut être un peu difficile de comprendre comment écrire le code, mais dans ce cas, j'aimerais que vous me le fassiez savoir dans les commentaires.

À propos de l'API Qiita

C'est une Web-API fournie par Qiita qui vous permet d'acquérir diverses données et de publier des articles. https://qiita.com/api/v2/docs

Il existe une limite supérieure pour l'acquisition d'articles, la limite supérieure pour les pages est de 100 à la fois et la limite supérieure pour per_page (combien d'articles sont acquis pour chaque page) est de 100, donc un maximum de 10 000 articles peut être acquis.

Cependant, l'authentification de l'utilisateur est requise, soyez donc prudent.

Accepte les demandes jusqu'à 1 000 fois par utilisateur et par heure à l'état authentifié et jusqu'à 60 fois par heure par adresse IP à l'état non authentifié. (De l'agent de l'API Qiita)

Cette fois, je veux obtenir un total de 900 articles par page, donc je vais faire page = 100, per_page = 1 x 9 fois.

Comment obtenir un jeton d'accès pour l'API Qiita

Tout d'abord, obtenez le jeton d'accès requis pour l'authentification de l'utilisateur.

-Sélectionnez "Application" dans "Paramètres" スクリーンショット 2020-02-01 19.34.53.png

・ "Jeton d'accès personnel" → "Émettre un nouveau jeton" スクリーンショット 2020-02-01 19.36.55.png

・ Cette fois, cochez uniquement read_qiita et "issue" スクリーンショット 2020-02-01 19.38.26.png

・ Un jeton sera émis, alors copiez-le. スクリーンショット 2020-02-01 19.39.27.png

Exemple de code pour l'authentification utilisateur de l'API Qiita

#En-tête requis pour l'authentification de l'utilisateur
h = {'Authorization': 'Porteur [Jeton d'accès obtenu]'}
connect = http.client.HTTPSConnection("qiita.com")
url = "/api/v2/items?"

Exemple de code pour obtenir un article

#Spécifiez la balise que vous souhaitez obtenir
query = "&query=tag%3A" + tag_name
#Obtenez le nombre d'articles créés pendant la période spécifiée dans la recherche
connect.request("GET", url + query, headers=h)
#Réponse à la demande
res = connect.getresponse()
#Lire la réponse
res.read()
#Réponse du serveur
print(res.status, res.reason)
total_count = int(res.headers['Total-Count'])
print("total_count: " + str(total_count))
#Obtenez des données et écrivez 100 articles dans un fichier txt
for pg in range(100):
    pg += 1
    page = "page=" + str(pg) + "&per_page=1"
    connect.request("GET", url + page + query, headers=h)
    res = connect.getresponse()
    data = res.read().decode("utf-8")
    #pandas de données de fichier json.Stocké au format DataFrame
    df = pd.read_json(data)
    #Spécifier un fichier txt
    filename = "./qiita/" + tag_name + "/page/" + str(pg) + ".txt"
    #Obtenez le titre et le texte de l'article Qiita
    df.to_csv(filename, columns=[
       'title',
       'body',
    ], header=False, index=False)
    print(str(pg) + "/" + str(100) + "Terminé")

Explication du code ci-dessus

Authentification d'utilisateur

Dans l'authentification de l'utilisateur, dans l'en-tête

'Porteur [Jeton d'accès obtenu]'}


 Il est nécessaire de spécifier le jeton pour l'authentification comme dans.

## Obtenir le fichier json
 Dans l'API Qiita, les données publiées sont un fichier json.
https://qiita.com/api/v2/docs#%E6%8A%95%E7%A8%BF

 Lorsque je l'obtiens, j'utilise la fonction read_json de la bibliothèque pandas pour le convertir au format DataFrame des pandas.

# Code pour obtenir 900 articles avec la balise spécifiée
 Voici tout le code.

```python
#Importer la bibliothèque
import http.client
import pandas as pd
import time
#Nombre de pages que vous souhaitez obtenir
TOTAL_PAGE = 900
TIME = int(TOTAL_PAGE / 100)
PER_PAGE = 1

#Authentification d'utilisateur
h = {'Authorization': 'Porteur [Jeton d'accès obtenu]'}
connect = http.client.HTTPSConnection("qiita.com")
url = "/api/v2/items?"

#Balise à spécifier
tag_name = "Java"

#Variable de comptage
num = 0
pg = 0
count = 0

#Obtenir des articles par tag à plusieurs reprises uniquement pour PAGE
query = "&query=tag%3A" + tag_name
#Obtenez le nombre d'articles créés pendant la période spécifiée dans la recherche
connect.request("GET", url + query, headers=h)
#Réponse à la demande
res = connect.getresponse()
#Lire la réponse
res.read()
#Réponse du serveur
print(res.status, res.reason)
print("Balise spécifiée: " + tag_name)
total_count = int(res.headers['Total-Count'])
print("total_count: " + str(total_count))

#Obtenez des données et écrivez 900 articles dans un fichier txt
for count in range(TIME):
    count += 1
    for pg in range(100):
        pg += 1
        page = "page=" + str(pg) + "&per_page=" + str(PER_PAGE)
        connect.request("GET", url + page + query, headers=h)
        res = connect.getresponse()
        data = res.read().decode("utf-8")
        df = pd.read_json(data)
        filename = "./qiita/" + tag_name + "/page" + str(count) + "-" + str(pg) + ".txt"
        df.to_csv(filename, columns=[
            'title',
            'body',
        ], header=False, index=False)
        print(str(count) + ":" + str(pg) + "/" + str(100) + "Terminé")

résultat

C'est difficile à comprendre, mais j'ai 900 articles.

スクリーンショット 2020-02-01 20.25.25.png

Résumé

Cette fois, je l'ai obtenu en précisant le titre et le corps de l'article, mais je peux aussi obtenir le "nombre de likes" et la "date de mise à jour", donc si vous voulez d'autres éléments, veuillez vous référer au responsable de l'API Qiita. S'il vous plaît essayez!

Matériel de référence

・ Officiel de l'API Qiita https://qiita.com/api/v2/docs

・ Obtenez des informations sur l'article Qiita avec l'API et écrivez-les en CSV https://qiita.com/arai-qiita/items/94902fc0e686e59cb8c5

Recommended Posts

Comment obtenir des données d'article à l'aide de l'API Qiita
Obtenir des données Salesforce à l'aide de l'API REST
Obtenez des données Amazon à l'aide de Keep API # 1 Obtenez des données
Publication groupée sur Qiita: équipe utilisant l'API Qiita
Obtenez des données Youtube en Python à l'aide de l'API Youtube Data
Comment obtenir des abonnés et des abonnés de Python à l'aide de l'API Mastodon
[Python] J'ai essayé d'obtenir diverses informations en utilisant l'API de données YouTube!
Comment afficher la carte à l'aide de l'API Google Map (Android)
[Python] Obtenez tous les commentaires à l'aide de Youtube Data Api
[Django] Comment obtenir des données en spécifiant SQL.
Comment obtenir un exemple de rapport à partir d'une valeur de hachage à l'aide de l'API de Virus Total
Comment rechercher des données HTML à l'aide de Beautiful Soup
Comment récupérer des données de courses de chevaux à l'aide de pandas read_html
Obtenez des données LEAD à l'aide de l'API REST de Marketo en Python
Comment obtenir plus de 1000 données avec SQLAlchemy + MySQLdb
[Python] Obtenez des données insight à l'aide de l'API Google My Business
Comment analyser avec Google Colaboratory à l'aide de l'API Kaggle
[Python] Obtenez des informations sur les utilisateurs et des articles sur l'API de Qiita
Comment gérer les trames de données
J'ai essayé de rechercher des vidéos à l'aide de l'API de données Youtube (débutant)
Obtenez des données à l'aide de l'API du ministère des Affaires intérieures et des Communications
Comment réinitialiser le mot de passe via l'API à l'aide du framework Rest Django
Comment obtenir un aperçu de vos données dans Pandas
Comment obtenir la température du thermo-hygromètre SwitchBot à l'aide de Raspberry Pi
[Introduction à Python] Comment obtenir des données avec la fonction listdir
J'ai essayé d'obtenir rapidement des données d'AS / 400 en utilisant pypyodbc
[Question] Comment obtenir les données des données textarea en temps réel à l'aide du flacon du framework Web Python
Comment obtenir uniquement les données nécessaires du groupe de données structurées à l'aide d'une méthode polyvalente
Comment installer Python à l'aide d'Anaconda
[Python] Comment FFT des données mp3
Acquisition de données à l'aide de l'API googlemap de python
Comment obtenir la version Python
Comment démarrer avec Scrapy
Comment démarrer avec Django
Comment utiliser l'API Python d'OpenPose
Comment augmenter les données avec PyTorch
Mémo d'acquisition de données à l'aide de l'API Backlog
Essayez d'obtenir des statistiques en utilisant e-Stat
Comment utiliser l'API Bing Search
Obtenez des données de Twitter avec Tweepy
[Python] Comment utiliser l'API Typetalk
Comment collecter des données d'apprentissage automatique
Comment mettre à jour une source de données de classeur packagée Tableau à l'aide de Python
Essayez de créer un article de Qiita avec l'API REST [Préparation environnementale]
J'ai essayé d'obtenir rapidement des données d'AS / 400 en utilisant pypyodbc Préparation 1
Comment éliminer le "Les balises doivent être un tableau de hachages." Erreur dans l'API qiita
Comment diviser et traiter une trame de données à l'aide de la fonction groupby
Comment obtenir l'identifiant du parent avec sqlalchemy
Qiita (1) Comment écrire un nom de code
Comment se débarrasser des longues inclusions
Comment dessiner un graphique avec Matplotlib
Comment obtenir une adresse IP lorsque Tornado + nginx
Comment configurer SVM à l'aide d'Optuna
J'ai essayé d'utiliser l'API de données YOUTUBE V3
Recevoir des e-mails à l'aide de l'API Gmail en Java
Obtenez les données de l'API Google Fit en Python
Comment installer un package à l'aide d'un référentiel
Comment obtenir la valeur du magasin de paramètres dans lambda (en utilisant python)