Eine Geschichte, die die Gegenwart von Qiita mit Qiita API + Elasticsearch + Kibana visualisiert

Als ich kürzlich mit dem Posten bei Qiita begann, hatte ich das Gefühl, dass ich es nach dem Posten für etwa 3 Tage bis 1 Woche auf Lager haben konnte. Wenn Sie die beliebten Tags innerhalb von 3 Tagen oder 1 Woche erfassen können, können Sie dann einen Artikel schreiben, der von mehr Personen gelesen werden kann? Ich habe darüber nachgedacht.

Überblick

Umgebung

Artikel Inhalt
Server-Betriebssystem CentOS6.6
Elasticsearch 5.3.1
Kibana 4.3.1
Qiita API v2
Terminal, das die API aufruft Mac
Mac OS OS X Yosemite
Python 2.7.10

Ich habe die Qiita-API verwendet, um die Post-Daten von meinem Mac abzurufen und an Elasticsearch zu senden, das auf dem Server in meinem Labor ausgeführt wird. Nach dem Senden an Elasticsearch http://xxx.xxx.xxx.xxx:5601 (* xxx.xxx.xxx.xxx ist die Adresse des Laborservers *) Ich habe mit Kibana auf Grafiken usw. zugegriffen und diese erstellt.

Verwendung der Qiita API

Details finden Sie in der Qiita API v2-Dokumentation. Ich werde die Elemente auflisten, auf die ich mich aus dem Dokument bezogen habe.

Endpunkt

https://qiita.com/api/v2

Authentifizierung

Wie in den Nutzungsbeschränkungen </ b> in der Dokumentation angegeben, können Sie ohne Authentifizierung etwa 60 Mal pro Stunde Abfragen durchführen. Es scheint, dass wenn Sie sich authentifizieren, es 1000 Mal sein wird, aber weil ich nicht sicher war, habe ich es diesmal ohne Authentifizierung getan.

So erhalten Sie grundlegende Postdaten

$ curl -XGET 'https://qiita.com/api/v2/items?page=3&per_page=20'

Wenn Sie dies tun, denke ich, dass das Ergebnis vorerst zurückgegeben wird. Die Bedeutung dieses Befehls besteht darin, 20 Daten auf der 3. Seite abzurufen. Mit anderen Worten, beachten Sie, dass die Anzahl der Daten, die abgerufen werden können, 20 und nicht 3 * 20 beträgt.

Sie können page und per_page selbst festlegen, es gibt jedoch Einschränkungen. Es ist in der folgenden Tabelle zusammengefasst.

parameter Mindestwert Maximalwert
page 1 100
per_page 20 100

Wenn Sie 100 Beitragsdaten von jeder Seite erhalten, können Sie bis zu 10000 Beitragsdaten abrufen.

Python-Code, der Post-Daten (JSON-Format) unverändert an Elasticsearch sendet

forward_json.py


# coding: utf-8
import json
import requests
from elasticsearch import Elasticsearch

#Adresse des Servers, auf dem Elasticsearch installiert ist
server_address = "xxx.xxx.xxx.xxx"
#Wenn installiert und Standardeinstellungen, ist der Port 9200
port = str(9200)
#Erstellen Sie eine Instanz von Elasticsearch
es = Elasticsearch("%s:%s" % (server_address, port))
#Endpunkt
endpoint = 'https://qiita.com/api/v2/items'
for p in range(1, 11): #Führen Sie die folgende Verarbeitung von Seite 1 bis Seite 10 auf die gleiche Weise durch.
    payload = {'page': p, 'per_page': '100'} #Erhalten Sie 100 Daten pro Seite
    r =  requests.get(endpoint, params=payload).json() #Erhalten Sie das Ergebnis im JSON-Format
    '''
    #Als Referenz
    print type(r)
    # => <type 'list'>
    print r[0].keys() 
    # => [u'body', u'group', u'rendered_body', u'url', u'created_at', u'tags', u'updated_at', u'private', u'coediting', u'user', u'title', u'id']
    '''
    for it in r: #Durchlaufen Sie die Ergebnisliste
        #Fügen Sie alle Daten ein! !!
        #Diesmal habe ich versucht, Index Qiita zu benennen
        es.index(index='qiita', doc_type='qiita', id=it['id'], body=it)

Schreiben Sie in server_address die Adresse des Servers, auf dem Elasticsearch und Kibana installiert sind. Wenn Sie diesen Code ausführen, sollten insgesamt 1000 Post-Daten in Elasticsearch gespeichert werden.

Visualisierung mit Kibana

Gehen Sie zu http //xxx.xxx.xxx.xxx:5601. Ich habe 1000 Post-Daten von der Qiita-API abgerufen und in Elasticsearch gespeichert. Dies ist ein zusammengedrücktes Bild mit rot hinzugefügten Zahlen und Grafikbeschreibungen. Der Benutzername war vorerst ausgeblendet.

kibana.png

Es gibt Zeiten, in denen die Anzahl der Beiträge extrem hoch ist. Klicken Sie also darauf. スクリーンショット 2016-07-19 22.21.25.png

Klicken Sie auf den grünen Kreis im Bild oben, um die Seite zu ändern.

spike.png

Es scheint, dass die Anzahl der Beiträge in diesem Zeitraum aufgrund der verärgerten Beiträge begeisterter Benutzer gestiegen ist.

Zusammenfassung der Ergebnisse

  • Sie können sehen, wer wie viel in 1000 Post-Daten gepostet hat
  • Sie können verschiedene Informationen erhalten, indem Sie Personen folgen, die derzeit mit Begeisterung posten
  • Die Anzahl der Tags beträgt 1076, aber das japanische Tag wurde nicht gut erhalten, und das Tag "Lernen" wurde als zwei Tags angesehen, "Lernen" und "Lernen". Zukünftige Aufgaben
  • Die folgende Tabelle fasst die 1000 beliebtesten Tags zusammen.
Rangfolge Verlinke den Namen Anzahl der Beiträge
1 python 62
2 ruby 50
3 aoj 49
4 javascript 49
5 c 45
6 ios 41
7 swift 38
8 php 38
9 java 33
10 linux 29

Das Ergebnis war! Immerhin gibt es viele Programmier-Tags! Ich wollte unbedingt die Bestandsnummernrangfolge der Tags kennen, habe jedoch die Bestandsnummer nicht mehr aus den veröffentlichten Daten abgerufen, da dies ohne Authentifizierung schwierig war. Ich möchte herausfordern, wenn ich Zeit habe. Dieses Mal habe ich festgestellt, dass es viele Posts mit Python-Tags gibt. Daher möchte ich weiterhin Beiträge veröffentlichen, damit ich Python-Tags hinzufügen kann.

Recommended Posts

Eine Geschichte, die die Gegenwart von Qiita mit Qiita API + Elasticsearch + Kibana visualisiert
Die Geschichte, ein Modul zu erstellen, das E-Mails mit Python überspringt
Die Geschichte der Erstellung einer Webanwendung, die umfangreiche Lesungen mit Django aufzeichnet
Eine Geschichte, die den Aufwand für Betrieb / Wartung reduziert
Die Geschichte, eine harte Zeit mit der gemeinsamen Menge HTTP_PROXY = ~ zu haben
Eine Geschichte, die die Lieferung von Nico Nama analysierte.
Die Geschichte des Erstellens einer Datenbank mithilfe der Google Analytics-API
Die Geschichte, wie man mit discord.py einen Fragenkasten-Bot erstellt
Ich habe mit Lambda eine App erstellt, die LINE über die Qiita-API über "Likes" informiert.
Die Geschichte des Exportierens eines Programms
Eine Geschichte, die mit der Installation der maschinellen Lernbibliothek JAX zusammenhängt
Ermitteln Sie die Anzahl der PVs von Qiita-Artikeln, die Sie mit API veröffentlicht haben
Die Geschichte, einen Standardtreiber für db mit Python zu erstellen.
Die Geschichte der Erstellung einer Website, auf der die Veröffentlichungsdaten von Büchern aufgeführt sind
Die Geschichte der Visualisierung beliebter Qiita-Tags mit Bar Chart Race
Eine Geschichte, die die elektronische Bewertung von Prüfungen mit Bilderkennung unterstützt
Die Geschichte des Erstellens eines Bots, der aktive Mitglieder in einem bestimmten Slack-Kanal mit Python anzeigt
Klasse, die die API von DMM trifft
Die Geschichte der Verarbeitung A von Blackjack (Python)
Die Geschichte eines Parksensors in 10 Minuten mit dem GrovePi + Starter Kit
Die Geschichte, wie man mit Python einen 100-Yen-Frühstücks-Bot für die Universität macht
Ich habe versucht, den Authentifizierungscode der Qiita-API mit Python abzurufen.
Die Geschichte der Entwicklung einer WEB-Anwendung, die automatisch Fangkopien generiert [MeCab]
Treffen Sie eine Methode einer Klasseninstanz mit der Python Bottle Web API
Die Geschichte einer Soundkamera mit Touch Designer und ReSpeaker
Holen Sie sich Artikelbesuche und Likes mit Qiita API + Python
Die Geschichte, ein Paket zu erstellen, das den Betrieb von Juman (Juman ++) & KNP beschleunigt
Ein Modell, das die Gitarre mit fast.ai identifiziert
Die Geschichte des tiefen Lernens mit TPU
Erstellt einen Python-Wrapper für die Qiita-API
Die Geschichte der IPv6-Adresse, die ich auf ein Minimum beschränken möchte
Die Geschichte einer Box, die Peppers AL Memory und MQTT miteinander verbindet
Holen Sie sich eine Liste der Artikel, die von Benutzern mit Python 3 Qiita API v2 veröffentlicht wurden
Rund um die Authentifizierung von PyDrive2, einem Paket zum Betreiben von Google Drive mit Python
Artikel, der eine Person sein kann, die den Mechanismus der API versteht und beherrscht (mit Python-Code)
Die Geschichte von Django, wie er eine Bibliothek erstellt, die vielleicht etwas nützlicher ist
Die Geschichte der Lernmethode, mit der LinuC Level 1 nur mit ping -t erworben wurde
Die Geschichte, einen Line Bot zu erstellen, der uns den Zeitplan für die Wettbewerbsprogrammierung erzählt
Die Geschichte eines Mel-Icon-Generators
Die Geschichte, die zur Installation von Pip passt
Nachdem Sie mit Python auf die Qiita-API geklickt haben, um eine Liste mit Artikeln für Anfänger zu erhalten, werden wir die Artikel von God besuchen
Ich habe eine Twitter-App erstellt, die die Zeichen der Vorverbindung mit Heroku entschlüsselt (Fehler).
Eine Geschichte, die fehlgeschlagen ist, als versucht wurde, das Suffix mit rstrip aus einem String zu entfernen
Die Geschichte des Starts eines Minecraft-Servers von Discord
[Python] Ein Programm, das die Anzahl der Täler zählt
Die Geschichte des Stoppens des Produktionsdienstes mit dem Befehl hostname
Die Geschichte des Teilens der Pyenv-Umgebung mit mehreren Benutzern
Erstellen Sie einen BOT, der die Discord-URL verkürzt
Machen Sie LCD-Screenshots mit Python-LEGO Mindstorms
#Eine Funktion, die den Zeichencode einer Zeichenfolge zurückgibt
Die Geschichte eines neuronalen Netzwerks der Musikgeneration
Visualisieren Sie das charakteristische Vokabular eines Dokuments mit D3.js.
Erstellen Sie eine Tweet-Heatmap mit der Google Maps-API
Erzeugen Sie diese Form des Bodens einer Haustierflasche
Ein Memo, dass ich den Datenspeicher mit Python berührt habe
Eine Geschichte über die Änderung des Master-Namens von BlueZ