Mis à jour parce que je savais comment utiliser des fichiers multimédias
Comme commenté par suzuryu Réécrire Mastodon.py Cela dépend de chaque environnement \Python27\Lib\site-packages\mastodon
Mastodon.py
###
# Writing data: Media
###
def media_post(self, media_file, mime_type = None):
"""
Post an image. media_file can either be image data or
a file name. If image data is passed directly, the mime
type has to be specified manually, otherwise, it is
determined from the file name.
Throws a MastodonIllegalArgumentError if the mime type of the
passed data or file can not be determined properly.
Returns a media dict. This contains the id that can be used in
status_post to attach the media file to a toot.
"""
if os.path.isfile(media_file) and mime_type == None:
mime_type = mimetypes.guess_type(media_file)[0]
media_file = open(media_file, 'rb')
if mime_type == None:
raise MastodonIllegalArgumentError('Could not determine mime type or data passed directly without mime type.')
random_suffix = ''.join(random.choice(string.ascii_uppercase + string.digits) for _ in range(10))
file_name = "mastodonpyupload_" + str(time.time()) + "_" + str(random_suffix) + mimetypes.guess_extension(mime_type)
media_file_description = (file_name, media_file, mime_type)
#Réécrire ci-dessous
#return self.__api_request('POST', '/api/v1/media', files = {'file': media_file_description}) #Vieux
return self.__api_request("POST", "/api/v1/media", files = {"file" : (file_name, open(media_file, "rb"))}) #Nouveau
Et, vous pouvez utiliser le fichier multimédia avec le code suivant!
# -*- coding: utf-8 -*-
from mastodon import *
import warnings
warnings.simplefilter("ignore", UnicodeWarning)
def login():
mastodon = Mastodon(
client_id="my_clientcred_pawoo.txt",
access_token="my_usercred_pawoo.txt",
api_base_url="https://pawoo.net"
)
return mastodon
def main():
mastodon = login()
media_files = [mastodon.media_post(media, "image/jpeg") for media in ["test.jpg "]]
mastodon.status_post(status="test", media_ids=media_files)
if __name__ == '__main__':
main()
> pip install Mastodon.py
Collecting Mastodon.py
Downloading Mastodon.py-1.0.6-py2.py3-none-any.whl
Collecting dateutils (from Mastodon.py)
Downloading dateutils-0.6.6.tar.gz
Requirement already satisfied: requests in c:\python27\lib\site-packages (from Mastodon.py)
Collecting argparse (from dateutils->Mastodon.py)
Downloading argparse-1.4.0-py2.py3-none-any.whl
Requirement already satisfied: python-dateutil in c:\python27\lib\site-packages (from dateutils->Mastodon.py)
Requirement already satisfied: pytz in c:\python27\lib\site-packages (from dateutils->Mastodon.py)
Requirement already satisfied: six>=1.5 in c:\python27\lib\site-packages (from python-dateutil->dateutils->Mastodon.py)
Building wheels for collected packages: dateutils
Running setup.py bdist_wheel for dateutils ... done
Stored in directory: C:\Users\Shirokuma\AppData\Local\pip\Cache\wheels\61\60\af\2081d0cb3cfaebaab704b6012d5b1a3bdba9e0c4be33ff7e65
Successfully built dateutils
Installing collected packages: argparse, dateutils, Mastodon.py
Successfully installed Mastodon.py-1.0.6 argparse-1.4.0 dateutils-0.6.6
Je ne le ferai qu'une seule fois, donc je le ferai depuis la console Cette fois, enregistrez-vous avec une instance de pawoo.net
> python
>> from mastodon import Mastodon
>> Mastodon.create_app("client name", api_base_url = "https://pawoo.net", to_file = "my_clientcred_pawoo.txt")
>> mastodon = Mastodon(client_id="my_clientcred_pawoo.txt",api_base_url = "https://pawoo.net")
>> mastodon.log_in("mail address", "passwd",to_file = "my_usercred_pawoo.txt")
Tweet sur Twitter
from mastodon import *
def login():
mastodon = Mastodon(
client_id="my_clientcred_pawoo.txt",
access_token="my_usercred_pawoo.txt",
api_base_url = "https://pawoo.net"
)
return mastodon
def main():
mastodon = login()
#Siffler
mastodon.toot("Hello World Toot by Python!")
#Lorsque vous utilisez des fichiers multimédias
#Je ne pouvais pas trop bien pour une raison quelconque(´;ω;`)
mastodon.media_post("test.jpg ", mime_type="image/jpeg")
#Vous pouvez utiliser des paramètres détaillés (pour rip, etc.)
mastodon.status_post(u"Putain de lèvre", in_reply_to_id=None, media_ids=None, sensitive=False, visibility='', spoiler_text=None)
if __name__ == '__main__':
main()
Autre...
#Renvoie des informations sur l'utilisateur d'un toot particulier
status(id)
#Renvoie une déclaration ou une réponse à un toot spécifique
status_context(id)
#Supprimer certains toots (boost?)? Confirmation requise
status_delete(id)
#Favoris un toot particulier
status_favourite(id)
#Renvoie une liste d'utilisateurs qui aiment un toot particulier
status_favourited_by(id)
#Booster un toot particulier? Confirmation requise
status_reblog(id)
#Renvoie une liste d'utilisateurs qui ont augmenté un toot particulier
status_reblogged_by(id)
#Défavorable pour un dent en particulier
status_unfavourite(id)
#Dévoiler certains toots
status_unreblog(id)
Il y a 5 délais
timeline(timeline="", max_id=None, since_id=None, limit=None)
#timeline=""La maison est la balise par défaut et les autres balises locales, publiques/le hashtag et les mentions peuvent être spécifiés
#S'il est difficile de spécifier
#home
timeline_home(max_id=None, since_id=None, limit=None)
#local
timeline_local(max_id=None, since_id=None, limit=None)
#public
timeline_publicl(max_id=None, since_id=None, limit=None)
#hashtag
timeline_hashtag(hashtag, max_id=None, since_id=None, limit=None)
#mentaions
timeline_mentaions(max_id=None, since_id=None, limit=None)
Puisque la chronologie est de type Liste, jetez un œil à l'intérieur
tl = mastodon.timeline_local(limit=1)
for row in tl:
print row
Contenu (exemple) Si vous regardez la clé, vous pouvez voir ce que c'est.
timeline_dict = {
'account' : {
'username': 'test',
'display_name': 'hello',
'statuses_count': 114,
'following_count': 514,
'url': 'https://pawoo.net/@test',
'locked': False,
'created_at': '2017-04-15T17:41:30.053Z',
'avatar_static': 'https://img.pawoo.net/accounts/avatars/***.jpg?****',
'note': 'test',
'header': '/headers/original/missing.png',
'followers_count': 3,
'avatar': 'https://img.pawoo.net/accounts/avatars/***.jpg?****',
'header_static': '/headers/original/missing.png',
'acct': 'test',
'id': 114514
}
'reblogged' : None,
'favourites_count' : 0,
'media_attachments' : [],
'in_reply_to_id', None,
'application' : {u'website': None, u'name': u'Web'},
'reblog' : None,
'in_reply_to_account_id' : None,
'tags', None,
'uri', "tag:pawoo.net,2017-04-15:objectId=114514:objectType=Status",
'visibility' : 'public',
'id' : 114514,
'content' : 'hogehoge',
'sensitive' : False,
'favourited' : None,
'mentions' : [],
'reblogs_count' : 0,
'spoiler_text': ,
'created_at' : '2017-04-15T18:21:15.197Z'
}
account(id)
Ensuite, la clé timeline_dict renvoie le contenu du compte Autre...
#Pour bloquer un utilisateur spécifique
account_block(id)
#Lorsque vous suivez un utilisateur spécifique
account_follow(id)
#Renvoie une liste d'abonnés pour un utilisateur particulier
account_followers(id)
#Renvoie une liste d'utilisateurs qu'un utilisateur particulier suit
account_following(id)
#Mettre en sourdine un utilisateur spécifique
account_mute(id)
#Renvoie si un utilisateur spécifique suit, etc.
account_relationships(id)
#Exemple
[{u'requested': False, u'muting': False, u'followed_by': False, u'blocking': False, u'following': False, u'id': id}]
#@Recherchez l'utilisateur avec son nom et renvoyez le résultat applicable dans Liste
account_search(q, limit=None)
#Renvoie une liste de ce qu'un utilisateur spécifique a dit
account_statuses(id, max_id=None, since_id=None, limit=None)
#Débloquer un utilisateur spécifique
account_unblock(id)
#Ne plus suivre un utilisateur spécifique
account_unfollow(id)
#Activer le son d'un utilisateur spécifique
account_unmute(id)
#Renvoie les informations utilisateur authentifiées
account_verify_credentials()
#Renvoie une liste d'utilisateurs bloqués sous forme de liste
blocks()
#Renvoie une liste de favoris sous forme de liste
favourites()
#Renvoie une liste de demandes de suivi sous forme de liste
follow_requests(id, max_id=None, since_id=None, limit=None)
#Rejeter les demandes de suivi pour des utilisateurs spécifiques
follow_request_reject(id)
#Approuver les demandes de suivi pour des utilisateurs spécifiques
follow_request_authorize(id)
#Renvoie une liste d'utilisateurs désactivés sous forme de liste
mutes()
#Renvoie une liste de notifications sous forme de liste (un trop grand nombre d'utilisateurs suivants, etc.)
notifications()
Voilà toutes les fonctions
C'est un bonus Depuis que j'ai créé un compte avec pawoo Saba, le code pour télécharger une image chome chome dans une zone de non-droit
# -*- coding: utf-8 -*-
from mastodon import *
import urllib2
#Pour désactiver l'avertissement Unicode
import warnings
warnings.simplefilter("ignore", UnicodeWarning)
#s'identifier
def login():
mastodon = Mastodon(
client_id="my_clientcred_pawoo.txt",
access_token="my_usercred_pawoo.txt",
api_base_url="https://pawoo.net"
)
return mastodon
#Télécharger
def download(url, save_path):
def get_file_name(url):
return url.split("/")[-1]
req = urllib2.Request(url)
req.add_header("User-agent", "Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)")
source = urllib2.urlopen(url).read()
with open(save_path + "/" + get_file_name(url), 'wb') as file:
file.write(source)
def main():
#S'identifier
mastodon = login()
#Obtenir la chronologie locale
tl = mastodon.timeline_local()
for row in tl:
#Télécharger uniquement s'il existe un fichier multimédia et que sensible est True
if len(row["media_attachments"]) != 0 and row["sensitive"] == True:
url = row["media_attachments"][0]["url"].split("?")[0]
print row["account"]["username"], "is uploaded picture"
download(url, "dl")
if __name__ == '__main__':
main()
Recommended Posts