[PYTHON] So erhalten Sie Artikeldaten mithilfe der Qiita-API

Einführung

[Erster Beitrag] Ich wollte den Artikel in Qiita erhalten, indem ich das Tag spezifizierte, also habe ich ihn in Python implementiert. Der Grund, warum ich überhaupt daran gearbeitet habe, war, dass ich den Livedoor News Corpus verwendet habe, um Artikelkategorien nach maschinellem Lernen zu klassifizieren, und mir wurde geraten, dass ich dasselbe mit Qiitas Artikeln tun möchte. .. .. Es mag etwas schwierig sein zu verstehen, wie man den Code schreibt, aber in diesem Fall möchte ich, dass Sie mich in den Kommentaren informieren.

Über die Qiita API

Es ist eine von Qiita bereitgestellte Web-API, mit der Sie verschiedene Daten erfassen und Artikel veröffentlichen können. https://qiita.com/api/v2/docs

Es gibt eine Obergrenze für den Erwerb von Artikeln, die Obergrenze für Seiten beträgt jeweils 100 und die Obergrenze für pro Seite (wie viele Artikel für jede Seite erfasst werden) beträgt 100, sodass maximal 10.000 Artikel erfasst werden können.

Es ist jedoch eine Benutzerauthentifizierung erforderlich. Seien Sie also vorsichtig.

Akzeptiert Anforderungen bis zu 1000 Mal pro Benutzer und Stunde im authentifizierten Zustand und bis zu 60 Mal pro Stunde pro IP-Adresse im nicht authentifizierten Zustand. (Vom Qiita API-Beamten)

Dieses Mal möchte ich insgesamt 900 Artikel pro Seite erhalten, also mache ich Seite = 100, pro Seite = 1 x 9 Mal.

So erhalten Sie Zugriffstoken für die Qiita-API

Holen Sie sich zunächst das für die Benutzerauthentifizierung erforderliche Zugriffstoken.

-Wählen Sie "Anwendung" aus "Einstellungen" スクリーンショット 2020-02-01 19.34.53.png

・ "Persönliches Zugriffstoken" → "Neues Token ausstellen" スクリーンショット 2020-02-01 19.36.55.png

・ Setzen Sie dieses Mal ein Häkchen nur für read_qiita und "issue" スクリーンショット 2020-02-01 19.38.26.png

・ Ein Token wird ausgestellt, kopieren Sie ihn also. スクリーンショット 2020-02-01 19.39.27.png

Codebeispiel für die Benutzerauthentifizierung der Qiita-API

#Header für die Benutzerauthentifizierung erforderlich
h = {'Authorization': 'Träger [Zugriffstoken erhalten]'}
connect = http.client.HTTPSConnection("qiita.com")
url = "/api/v2/items?"

Codebeispiel zum Abrufen eines Artikels

#Geben Sie das Tag an, das Sie erhalten möchten
query = "&query=tag%3A" + tag_name
#Ermitteln Sie die Anzahl der Artikel, die innerhalb des in der Suche angegebenen Zeitraums erstellt wurden
connect.request("GET", url + query, headers=h)
#Antwort auf Anfrage
res = connect.getresponse()
#Antwort lesen
res.read()
#Antwort vom Server
print(res.status, res.reason)
total_count = int(res.headers['Total-Count'])
print("total_count: " + str(total_count))
#Holen Sie sich Daten und schreiben Sie 100 Artikel in die TXT-Datei
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")
    #json file data pandas.Im DataFrame-Format gespeichert
    df = pd.read_json(data)
    #Angeben einer txt-Datei
    filename = "./qiita/" + tag_name + "/page/" + str(pg) + ".txt"
    #Holen Sie sich Titel und Text aus dem Qiita-Artikel
    df.to_csv(filename, columns=[
       'title',
       'body',
    ], header=False, index=False)
    print(str(pg) + "/" + str(100) + "Erledigt")

Erläuterung des obigen Codes

Benutzerauthentifizierung

Bei der Benutzerauthentifizierung im Header

'Träger [Zugriffstoken erhalten]'}


 Es ist erforderlich, das Token für die Authentifizierung wie in anzugeben.

## Holen Sie sich json-Datei
 In der Qiita-API sind die veröffentlichten Daten eine JSON-Datei.
https://qiita.com/api/v2/docs#%E6%8A%95%E7%A8%BF

 Wenn ich es bekomme, verwende ich die Funktion read_json der Pandas-Bibliothek, um es in das DataFrame-Format von Pandas zu konvertieren.

# Code, um 900 Artikel mit dem angegebenen Tag zu erhalten
 Hier ist der gesamte Code.

```python
#Bibliothek importieren
import http.client
import pandas as pd
import time
#Anzahl der Seiten, die Sie erhalten möchten
TOTAL_PAGE = 900
TIME = int(TOTAL_PAGE / 100)
PER_PAGE = 1

#Benutzerauthentifizierung
h = {'Authorization': 'Träger [Zugriffstoken erhalten]'}
connect = http.client.HTTPSConnection("qiita.com")
url = "/api/v2/items?"

#Tag zum Angeben
tag_name = "Java"

#Zählvariable
num = 0
pg = 0
count = 0

#Artikel nur für PAGE wiederholt per Tag abrufen
query = "&query=tag%3A" + tag_name
#Ermitteln Sie die Anzahl der Artikel, die innerhalb des in der Suche angegebenen Zeitraums erstellt wurden
connect.request("GET", url + query, headers=h)
#Antwort auf Anfrage
res = connect.getresponse()
#Antwort lesen
res.read()
#Antwort vom Server
print(res.status, res.reason)
print("Angegebenes Tag: " + tag_name)
total_count = int(res.headers['Total-Count'])
print("total_count: " + str(total_count))

#Holen Sie sich Daten und schreiben Sie 900 Artikel in die TXT-Datei
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) + "Erledigt")

Ergebnis

Es ist schwer zu verstehen, aber ich habe 900 Artikel.

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

Zusammenfassung

Dieses Mal habe ich es durch Angabe des Titels und des Hauptteils des Artikels erhalten, aber ich kann auch die "Anzahl der Likes" und das "Aktualisierungsdatum" abrufen. Wenn Sie also andere Artikel wünschen, wenden Sie sich bitte an den Qiita API-Mitarbeiter. Bitte versuche!

Referenzmaterial

・ Qiita API-Beamter https://qiita.com/api/v2/docs

・ Holen Sie sich Qiita-Artikelinformationen mit API und schreiben Sie sie in CSV https://qiita.com/arai-qiita/items/94902fc0e686e59cb8c5

Recommended Posts

So erhalten Sie Artikeldaten mithilfe der Qiita-API
Abrufen von Salesforce-Daten mithilfe der REST-API
Abrufen von Amazon-Daten mit Keep API # 1 Abrufen von Daten
Massenposting an Qiita: Team mit Qiita API
Holen Sie sich Youtube-Daten in Python mithilfe der Youtube-Daten-API
So erhalten Sie mithilfe der Mastodon-API Follower und Follower von Python
[Python] Ich habe versucht, mithilfe der YouTube-Daten-API verschiedene Informationen abzurufen!
So zeigen Sie eine Karte mit der Google Map API (Android) an
[Python] Holen Sie sich alle Kommentare mit Youtube Data Api
[Django] So erhalten Sie Daten durch Angabe von SQL.
So erhalten Sie mithilfe der API von Virus Total einen Beispielbericht aus einem Hashwert
So suchen Sie HTML-Daten mit Beautiful Soup
Wie man Pferderenndaten mit pandas read_html kratzt
Holen Sie sich LEAD-Daten mit der REST-API von Marketo in Python
So erhalten Sie mit SQLAlchemy + MySQLdb mehr als 1000 Daten
[Python] Abrufen von Insight-Daten mithilfe der Google My Business-API
Analysieren mit Google Colaboratory mithilfe der Kaggle-API
[Python] Mit der API von Qiita erhalten Sie Benutzer- und Artikelinformationen
Umgang mit Datenrahmen
Ich habe versucht, Videos mit der Youtube Data API (Anfänger) zu suchen.
Erhalten Sie Daten mithilfe der API des Ministeriums für innere Angelegenheiten und Kommunikation
Zurücksetzen des Passworts über die API mit dem Django Rest Framework
So erhalten Sie einen Überblick über Ihre Daten in Pandas
So erhalten Sie die Temperatur vom SwitchBot-Thermo-Hygrometer mit Himbeer-Pi
[Einführung in Python] So erhalten Sie Daten mit der Funktion listdir
Ich habe versucht, mit pypyodbc schnell Daten von AS / 400 abzurufen
[Frage] So erhalten Sie die Daten von Textbereichsdaten in Echtzeit mithilfe der Python-Webframework-Flasche
So erhalten Sie mit einer vielseitigen Methode nur die erforderlichen Daten aus der strukturierten Datengruppe
So installieren Sie Python mit Anaconda
[Python] Wie man MP3-Daten fFT
Datenerfassung mit Python Googlemap API
So erhalten Sie die Python-Version
Wie fange ich mit Scrapy an?
Wie fange ich mit Django an?
Verwendung der Python-API von OpenPose
Aufblasen von Daten (Datenerweiterung) mit PyTorch
Datenerfassungsnotiz mit der Backlog-API
Versuchen Sie, Statistiken mit e-Stat abzurufen
Wie benutzt man Bing Search API?
Holen Sie sich Daten von Twitter mit Tweepy
[Python] Verwendung der Typetalk-API
Sammeln von Daten zum maschinellen Lernen
So aktualisieren Sie eine in Tableau gepackte Arbeitsmappen-Datenquelle mit Python
Versuchen Sie, einen Artikel von Qiita mit der REST-API [Umweltvorbereitung] zu erstellen.
Ich habe versucht, mit pypyodbc Preparation 1 schnell Daten von AS / 400 abzurufen
So entfernen Sie die "Tags müssen ein Array von Hashes sein." Fehler in Qiita API
Teilen und Verarbeiten eines Datenrahmens mithilfe der Groupby-Funktion
So erhalten Sie die Eltern-ID mit sqlalchemy
Qiita (1) Wie schreibe ich einen Codenamen?
Wie man lange Einschlüsse loswird
So zeichnen Sie ein Diagramm mit Matplotlib
Wie bekomme ich IP bei Tornado + Nginx
So richten Sie SVM mit Optuna ein
Ich habe versucht, YOUTUBE Data API V3 zu verwenden
Erhalten Sie E-Mails mithilfe der Google Mail-API in Java
Holen Sie sich Google Fit API-Daten in Python
So installieren Sie ein Paket mithilfe eines Repositorys
So erhalten Sie den Wert aus dem Parameterspeicher in Lambda (mit Python)