Une histoire qui visualise le présent de Qiita avec Qiita API + Elasticsearch + Kibana

Ce que j'ai ressenti lorsque j'ai commencé à publier sur Qiita récemment, c'est que j'ai pu le stocker pendant environ 3 jours à 1 semaine après la publication. Donc, si vous pouvez saisir les balises populaires en environ 3 jours ou 1 semaine, pouvez-vous écrire un article qui peut être lu par plus de gens? J'y ai pensé.

Aperçu

environnement

article Contenu
OS du serveur CentOS6.6
Elasticsearch 5.3.1
Kibana 4.3.1
Qiita API v2
Terminal qui appelle l'API Mac
Mac OS OS X Yosemite
Python 2.7.10

J'ai utilisé l'API Qiita pour obtenir les données de publication de mon Mac et je les ai envoyées à Elasticsearch sur le serveur de mon laboratoire. Après l'envoi à Elasticsearch http://xxx.xxx.xxx.xxx:5601 (* xxx.xxx.xxx.xxx est l'adresse du serveur du laboratoire *) J'ai accédé et créé des graphiques, etc. en utilisant Kibana.

Comment utiliser l'API Qiita

Les détails peuvent être trouvés dans la Documentation API Qiita v2. Je vais énumérer les éléments auxquels j'ai fait référence dans le document.

point final

https://qiita.com/api/v2

Authentification

Comme indiqué dans les restrictions d'utilisation </ b> de la documentation, vous pouvez effectuer des requêtes environ 60 fois par heure sans authentification. Il semble que si vous vous authentifiez, ce sera 1000 fois, mais parce que je n'étais pas sûr, je l'ai fait sans authentification cette fois.

Comment obtenir les données de base sur les publications

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

Si vous le faites, je pense que le résultat sera renvoyé pour le moment. La signification de cette commande est d'obtenir 20 éléments de données sur la 3ème page. En d'autres termes, notez que le nombre de données pouvant être obtenues est de 20 et non de 3 * 20.

Vous pouvez décider vous-même de la page et de la page par_page, mais il existe des restrictions. Il est résumé dans le tableau ci-dessous.

parameter valeur minimum Valeur maximum
page 1 100
per_page 20 100

Si vous obtenez 100 données de publication sur chaque page, vous pouvez obtenir jusqu'à 10000 données de publication.

Code Python qui envoie les données de publication (format json) à Elasticsearch telles quelles

forward_json.py


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

#Adresse du serveur sur lequel Elasticsearch est installé
server_address = "xxx.xxx.xxx.xxx"
#S'il est installé et les paramètres standard, le port est 9200
port = str(9200)
#Créer une instance d'Elasticsearch
es = Elasticsearch("%s:%s" % (server_address, port))
#point final
endpoint = 'https://qiita.com/api/v2/items'
for p in range(1, 11): #Effectuez le traitement suivant de la page 1 à la page 10 de la même manière.
    payload = {'page': p, 'per_page': '100'} #Obtenez 100 données par page
    r =  requests.get(endpoint, params=payload).json() #Recevez le résultat au format json
    '''
    #Pour votre référence
    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: #Parcourez la liste des résultats
        #Insérez toutes les données! !!
        #Cette fois j'ai essayé de nommer l'index qiita
        es.index(index='qiita', doc_type='qiita', id=it['id'], body=it)

Dans server_address, écrivez l'adresse du serveur sur lequel Elasticsearch et Kibana sont installés. L'exécution de ce code doit stocker un total de 1000 données de publication dans Elasticsearch.

Visualisation avec Kibana

Accédez à http //xxx.xxx.xxx.xxx:5601. J'ai récupéré 1000 données de publication depuis l'API Qiita et je les ai stockées dans Elasticsearch. Ceci est une image compressée avec des nombres et des descriptions de graphiques ajoutés en rouge. Pour le moment, le nom d'utilisateur était masqué.

kibana.png

Il y a des moments où le nombre de messages est extrêmement élevé, alors cliquez dessus. スクリーンショット 2016-07-19 22.21.25.png

Cliquez sur le cercle vert dans l'image ci-dessus pour changer de page.

spike.png

Il semble que le nombre de messages au cours de cette période a augmenté en raison des messages en colère d'utilisateurs enthousiastes.

Résumé des résultats

  • Vous pouvez voir qui a publié combien dans 1000 données de publication
  • Vous pouvez obtenir diverses informations en suivant les personnes qui publient actuellement avec enthousiasme
  • Le nombre de balises est de 1076, mais la balise japonaise n'a pas été bien obtenue, et la balise «apprentissage» a été considérée comme deux balises, «apprentissage» et «apprentissage». Tâches futures
  • Le tableau ci-dessous résume les 1000 balises les plus populaires.
Classement Nom de la balise nombre de postes
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

Le résultat était! Après tout, il existe de nombreuses balises de programmation! Je voulais vraiment connaître le classement des numéros de stock des étiquettes, mais j'ai arrêté d'obtenir le numéro de stock à partir des données affichées car c'était difficile sans authentification. Je voudrais contester quand j'ai le temps. Cette fois, j'ai trouvé qu'il y avait de nombreux articles avec des balises python, donc j'aimerais continuer à publier pour pouvoir ajouter des balises python.

Recommended Posts

Une histoire qui visualise le présent de Qiita avec Qiita API + Elasticsearch + Kibana
L'histoire de la création d'un module qui ignore le courrier avec python
L'histoire de la création d'une application Web qui enregistre des lectures approfondies avec Django
Une histoire qui réduit l'effort de fonctionnement / maintenance
Une histoire qui a eu du mal avec l'ensemble commun HTTP_PROXY = ~
Une histoire qui a analysé la livraison de Nico Nama.
L'histoire de la création d'une base de données à l'aide de l'API Google Analytics
L'histoire de la création d'un bot de boîte à questions avec discord.py
J'ai créé une application avec Lambda qui notifie LINE de "j'aime" à l'aide de l'API Qiita.
L'histoire de l'exportation d'un programme
Une histoire coincée avec l'installation de la bibliothèque de machine learning JAX
Obtenez le nombre de PV d'articles Qiita que vous avez publiés avec l'API
L'histoire de la création d'un pilote standard pour db avec python.
L'histoire de la création d'un site qui répertorie les dates de sortie des livres
L'histoire de la visualisation des balises Qiita populaires avec Bar Chart Race
Une histoire qui prend en charge la notation électronique des examens avec reconnaissance d'image
L'histoire de la création d'un Bot qui affiche les membres actifs dans un canal spécifique de Slack avec Python
Classe qui atteint l'API de DMM
L'histoire du traitement A du blackjack (python)
L'histoire d'un capteur de stationnement en 10 minutes avec le kit de démarrage GrovePi +
L'histoire de la création d'un robot LINE pour le petit-déjeuner d'une université de 100 yens avec Python
J'ai essayé d'obtenir le code d'authentification de l'API Qiita avec Python.
L'histoire du développement d'une application WEB qui génère automatiquement des copies de capture [MeCab]
Hit une méthode d'une instance de classe avec l'API Web Python Bottle
L'histoire de la création d'une caméra sonore avec Touch Designer et ReSpeaker
Obtenez des visites d'articles et des likes avec l'API Qiita + Python
L'histoire de la création d'un package qui accélère le fonctionnement de Juman (Juman ++) & KNP
Un modèle qui identifie la guitare avec fast.ai
L'histoire de l'apprentissage profond avec TPU
Création d'un wrapper Python pour l'API Qiita
L'histoire de l'adresse IPv6 que je souhaite conserver au minimum
L'histoire de la fabrication d'une boîte qui interconnecte la mémoire AL de Pepper et MQTT
Obtenez une liste d'articles publiés par les utilisateurs avec Python 3 Qiita API v2
Autour de l'authentification de PyDrive2, un package pour faire fonctionner Google Drive avec Python
Article qui peut être une ressource humaine qui comprend et maîtrise le mécanisme de l'API (avec du code Python)
L'histoire de Django créant une bibliothèque qui pourrait être un peu plus utile
L'histoire de la méthode d'apprentissage qui a acquis LinuC Niveau 1 avec seulement ping -t
L'histoire de la création d'un Line Bot qui nous raconte le calendrier de la programmation du concours
L'histoire de la création d'un générateur d'icônes mel
L'histoire qui s'inscrit dans l'installation de pip
Après avoir frappé l'API Qiita avec Python pour obtenir une liste d'articles pour les débutants, nous visiterons les articles divins
J'ai créé une application Twitter qui décrypte les caractères de pré-connexion avec heroku (échec)
Une histoire qui a échoué lors de la tentative de suppression du suffixe d'une chaîne avec rstrip
L'histoire du lancement d'un serveur Minecraft depuis Discord
[Python] Un programme qui compte le nombre de vallées
L'histoire de l'arrêt du service de production avec la commande hostname
L'histoire du partage de l'environnement pyenv avec plusieurs utilisateurs
Créez un BOT qui raccourcit l'URL Discord
Prenez des captures d'écran LCD avec Python-LEGO Mindstorms
#Une fonction qui renvoie le code de caractère d'une chaîne de caractères
L'histoire de la création d'un réseau neuronal de génération musicale
Visualisez le vocabulaire caractéristique d'un document avec D3.js
Créez une carte thermique de tweet avec l'API Google Maps
Générer cette forme du fond d'une bouteille pour animaux de compagnie
Un mémo que j'ai touché au magasin de données avec python
Une histoire sur le changement du nom principal de BlueZ