Ich werde vorstellen, wie die API verwendet wird, die ich bei der Entwicklung des Management-Tools "MASTMAN" von Mastdon fehlerhaft gemacht habe.
Docs Die Verwendung der API fühlt sich wie folgt relativ einfach an (es hätte sein sollen ...)
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)
Referenz: Follower eines Kontos abrufen
41 Fälle!
Der folgende Code erhält die ersten 10 Follower-IDs, erhält die kleinste ID und nimmt dann die 10 kleineren IDs und wiederholt sie.
#!/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):
#Das Standardlimit ist 40, diesmal jedoch 10, da Fehlerfälle leicht zu erkennen sind!
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())
#Das Ergebnis ist limit_num(Wenn es diesmal 10 Fälle sind, holen Sie sich die nächsten 10 Fälle...
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():
#toitech ID
my_user_id = 96368
res = get_followers(my_user_id)
#Anzahl der resultierenden Elemente
print len(res)
#Anzahl der eindeutigen IDs im Ergebnis
print len(set(map(lambda x: x.get('id'), res)))
if __name__ == '__main__':
main()
Wenn ich das mache, bekomme ich nur 10! !! !!
$ python get_follower.py
10
10
Wenn Sie sich Docs noch einmal ansehen, sehen Sie den folgenden Hinweis ...
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.
Es scheint anders zu sein, die ID des zurückgegebenen Ergebnisses als Since_ID oder Max_ID anzugeben. Schauen Sie sich die Kopfzeile an.
#!/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):
#Das Standardlimit ist 40, diesmal jedoch 10, da Fehlerfälle leicht zu erkennen sind!
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())
#Das Ergebnis ist limit_num(Wenn es diesmal 10 Fälle sind, holen Sie sich die nächsten 10 Fälle...
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():
#toitech ID
my_user_id = 96368
res = get_followers(my_user_id)
#Anzahl der resultierenden Elemente
print len(res)
#Anzahl der eindeutigen IDs im Ergebnis
print len(set(map(lambda x: x.get('id'), res)))
if __name__ == '__main__':
main()
Wenn ich das mache ... ist es 41! Ich bin glücklich.
$ python get_follower.py
41
41
Lesen Sie das Dokument auch dann richtig, wenn Sie beschäftigt sind
Sie können den folgenden Status (toot) auf die gleiche Weise erhalten wie den ersteren (schlechte Follower bekommen)! Je neuer der Toot, desto höher die Toot-ID, aber die Follower sind nicht immer so groß wie die Leute, denen kürzlich gefolgt wurde. Das ist wahrscheinlich der Fall.
GET /api/v1/accounts/:id/statuses
Mastdons Management-Tool "MASTMAN" befindet sich in der Entwicklung und jeder sollte es versuchen!
Recommended Posts