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
41 cas!
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
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
Lisez correctement le document même si vous êtes occupé
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
L'outil de gestion de Mastdon "MASTMAN" est en cours de développement et tout le monde devrait l'essayer!
Recommended Posts