Comment obtenir des abonnés et des abonnés de Python à l'aide de l'API Mastodon

introduction

Je vais vous présenter comment utiliser l'API que j'ai fait une erreur lors du développement de l'outil de gestion "MASTMAN" de Mastdon.

Docs Comment utiliser l'API semble relativement simple comme suit (cela aurait dû être ...)

GET /api/v1/accounts/:id/followers

Query parameters: max_id : Get a list of followers with ID less than this value since_id : Get a list of followers with ID greater than this value limit : Maximum number of followers to get (Default 40, Max 80)

Référence: Obtenir les abonnés d'un compte

Nombre de mes abonnés

da7e85c5357d395b78c6a383b770be3b.png

41 cas!

Obtenez de mauvais abonnés

Le code ci-dessous obtient les 10 premiers ID d'abonnés, obtient le plus petit ID d'eux, puis prend les 10 ID plus petits et se répète.


#!/usr/bin/env python
# -*- coding: utf-8 -*-

import urllib2
import urllib
import json
import re

access_token = 'xxxxx'

def get_followers(user_id, max_id=None):
    #La limite par défaut est de 40, mais cette fois il est de 10 car il est facile de voir les cas d'échec!
    limit_num = 10
    url = "https://mstdn.jp/api/v1/accounts/%d/followers" %(user_id)

    param = []
    param.append(('limit', limit_num))
    if max_id:
        param.append(('max_id', max_id))
    url += "?" + urllib.urlencode( param )

    request = urllib2.Request(url)
    auth_header = 'Bearer %s' %(access_token)
    request.add_header('Authorization', auth_header)
    res = urllib2.urlopen(request)
    res_list = json.loads(res.read())

    #Le résultat est limite_num(Si c'est 10 cas cette fois, obtenez les 10 prochains cas...
    if len(res_list) == limit_num:
        next_max_id = min(map(lambda x: x.get('id'), res_list))
        res_list.extend(get_followers(user_id, max_id=next_max_id))
    return res_list

def main():
    #identifiant toitech
    my_user_id = 96368
    res = get_followers(my_user_id)
    #Nombre d'éléments résultants
    print len(res)
    #Nombre d'identifiants uniques dans le résultat
    print len(set(map(lambda x: x.get('id'), res)))


if __name__ == '__main__':
    main()

Quand je fais cela, je n'en reçois que 10! !! !!

$ python get_follower.py
10
10

Obtenez les bons abonnés

Si vous regardez à nouveau Docs, vous verrez la note suivante ...

Note: max_id and since_id for next and previous pages are provided in the Link header. It is not possible to use the id of the returned objects to construct your own URLs, because the results are sorted by an internal key.

Il semble qu'il soit différent de spécifier l'ID du résultat retourné comme since_id ou max_id. Regardez l'en-tête.


#!/usr/bin/env python
# -*- coding: utf-8 -*-

import urllib2
import urllib
import json
import re

access_token = 'xxxxx'

def get_followers(user_id, max_id=None):
    #La limite par défaut est de 40, mais cette fois il est de 10 car il est facile de voir les cas d'échec!
    limit_num = 10
    url = "https://mstdn.jp/api/v1/accounts/%d/followers" %(user_id)

    param = []
    param.append(('limit', limit_num))
    if max_id:
        param.append(('max_id', max_id))
    url += "?" + urllib.urlencode( param )

    request = urllib2.Request(url)
    auth_header = 'Bearer %s' %(access_token)
    request.add_header('Authorization', auth_header)
    res = urllib2.urlopen(request)
    res_list = json.loads(res.read())

    #Le résultat est limite_num(Si c'est 10 cas cette fois, obtenez les 10 prochains cas...
    if len(res_list) == limit_num:
        link_str = res.info().getheaders("link")[0]
        next_max_id = re.search("max_id=(\d+)>", link_str).group(1)
        res_list.extend(get_followers(user_id, max_id=next_max_id))
    return res_list


def main():
    #identifiant toitech
    my_user_id = 96368
    res = get_followers(my_user_id)
    #Nombre d'éléments résultants
    print len(res)
    #Nombre d'identifiants uniques dans le résultat
    print len(set(map(lambda x: x.get('id'), res)))


if __name__ == '__main__':
    main()

Quand je fais ça ... c'est 41! Je suis heureux.

$ python get_follower.py
41
41

Résumé

Lisez correctement le document même si vous êtes occupé

Bonne raison

Vous pouvez obtenir le statut suivant (toot) de la même manière que l'ancien (obtenir de mauvais abonnés)! Plus le toot est récent, plus l'ID de toot est élevé, mais les abonnés ne sont pas toujours aussi importants que les personnes qui ont été suivies récemment, c'est donc probablement le cas.


GET /api/v1/accounts/:id/statuses

Publicité

L'outil de gestion de Mastdon "MASTMAN" est en cours de développement et tout le monde devrait l'essayer!

Recommended Posts

Comment obtenir des abonnés et des abonnés de Python à l'aide de l'API Mastodon
Comment obtenir la version Python
De Python à l'utilisation de MeCab (et CaboCha)
Explication API pour toucher mastodonte de python
[Python] Comment obtenir le premier et le dernier jour du mois
[Python] Comment lire les données de CIFAR-10 et CIFAR-100
Comment obtenir des données d'article à l'aide de l'API Qiita
Comment obtenir les fichiers dans le dossier [Python]
[Python Kivy] Comment obtenir le chemin du fichier par glisser-déposer
Comment obtenir la différence de date et d'heure en secondes avec Python
Comment obtenir la valeur du magasin de paramètres dans lambda (en utilisant python)
Exemple de code pour obtenir oauth_token et oauth_token_secret de l'API Twitter en Python 2.7
Comment obtenir un exemple de rapport à partir d'une valeur de hachage à l'aide de l'API de Virus Total
Recevez des nouvelles de chacune des trois principales entreprises de téléphonie mobile en utilisant Django et l'API News
[Rails] Comment obtenir des informations de localisation à l'aide de l'API de géolocalisation
Comment démarrer le projet Python en 2020 (Windows WSL et Mac commun)
Comment obtenir le nom de la variable lui-même en python
Comment obtenir le nombre de chiffres en Python
[Python] Récupérez le texte de la loi à partir de l'API e-GOV law
Notification PUSH de Python vers Android à l'aide de l'API de Google
Envoyez et recevez Gmail via l'API Gmail en utilisant Python
[Introduction à Python] Comment arrêter la boucle en utilisant break?
Comment publier un ticket depuis l'API Shogun
Récupérer des fichiers depuis Linux en utilisant paramiko et scp [Python]
[Pour les débutants] Comment afficher des cartes et des champs de recherche à l'aide de l'API Javascript GoogleMap
Une histoire sur un débutant Python essayant d'obtenir des résultats de recherche Google à l'aide de l'API
Passez un tableau de PHP à PYTHON et effectuez un traitement numpy pour obtenir le résultat
Obtenez votre fréquence cardiaque à partir de l'API fitbit en Python!
Comment se connecter à diverses bases de données à partir de Python (PEP 249) et SQL Alchemy
Comment obtenir la dernière (dernière) valeur d'une liste en Python
Comment obtenir toutes les clés et valeurs du dictionnaire
Prédire le sexe à partir du nom à l'aide de l'API Gender et de Pykakasi en Python
Comment entrer dans l'environnement de développement Python avec Vagrant
Comment obtenir la température du thermo-hygromètre SwitchBot à l'aide de Raspberry Pi
J'ai essayé d'obtenir diverses informations de l'API codeforces
Obtenez la météo en utilisant l'API et laissez Raspberry Pi parler!
[Introduction à Python] Comment obtenir des données avec la fonction listdir
Comment installer Python à l'aide d'Anaconda
Comment démarrer avec Python
Comment utiliser l'API Python d'OpenPose
Utilisez l'API Flickr de Python
python Obtenez la météo à venir de l'API météo
Comment accéder à wikipedia depuis python
Exécutez Ansible à partir de Python à l'aide de l'API
[Python] Comment utiliser l'API Typetalk
[Python / Ruby] Comprendre le code Comment obtenir des données en ligne et les écrire au format CSV
Comment connaître le nombre de GPU de python ~ Remarques sur l'utilisation du multitraitement avec pytorch ~
Comment obtenir uniquement les données nécessaires du groupe de données structurées à l'aide d'une méthode polyvalente
Comment obtenir et définir le nom du serveur NTP par DHCP
Comment réussir et étudier l'examen de base de la certification d'ingénieur Python 3
python / pandas / dataframe / Comment obtenir la ligne / colonne / index / colonne la plus simple
Comment obtenir une chaîne à partir d'un argument de ligne de commande en python
[Python] Comment obtenir et modifier les lignes / colonnes / valeurs d'une table.
Accédez à l'API New Relic en Python pour obtenir l'état du serveur
[EC2] Comment installer et télécharger chromedriver à partir de la ligne de commande
Obtenez et définissez la valeur du menu déroulant en utilisant Python et Selenium
[Python] Talk en utilisant OpenJTalk et l'API Talk (jusqu'à la sortie vocale)