[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.
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.
Tout d'abord, obtenez le jeton d'accès requis pour l'authentification de l'utilisateur.
-Sélectionnez "Application" dans "Paramètres"
・ "Jeton d'accès personnel" → "Émettre un nouveau jeton"
・ Cette fois, cochez uniquement read_qiita et "issue"
・ Un jeton sera émis, alors copiez-le.
#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?"
#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é")
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é")
C'est difficile à comprendre, mais j'ai 900 articles.
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!
・ 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