Explication API pour toucher mastodonte de python

Mise à jour du 16/04/2017 </ font>

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()

environnement

  • Windows
  • Python2.7

Préparation

Installation

Télécharger ici

> 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

enregistrement

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")

Explication de l'API

Relation Toot

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)

Relatif à la chronologie

Il y a 5 délais

  • home
  • local
  • public
  • hashtag
  • mentions
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)

Contenu de la chronologie

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'
}

Relation de compte

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

Télécharger des images avec sensible True

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

Explication API pour toucher mastodonte de python
Connectez-vous à l'API Websocket de Coincheck depuis Python
Comment obtenir des abonnés et des abonnés de Python à l'aide de l'API Mastodon
Touchez MySQL depuis Python 3
Changements de Python 3.0 à Python 3.5
Changements de Python 2 à Python 3.0
Publier de Python vers Slack
Flirter de PHP à Python
Notification PUSH de Python vers Android à l'aide de l'API de Google
Anaconda mis à jour de 4.2.0 à 4.3.0 (python3.5 mis à jour vers python3.6)
Passer de python2.7 à python3.6 (centos7)
Connectez-vous à sqlite depuis python
Utilisez l'API e-Stat de Python
Jusqu'à Toot to Mastodon (Python)
J'ai essayé de créer une API list.csv avec Python à partir de swagger.yaml
Appelez Matlab depuis Python pour optimiser
Toucher les objets Python d'Elixir
J'ai essayé de toucher Python (installation)
Publication de Python sur la chronologie Facebook
[Lambda] [Python] Publier sur Twitter depuis Lambda!
Connectez-vous à la base de données utf8mb4 à partir de python
Utilisez l'API kabu Station® de Python
Publier une image de Python sur Tumblr
J'ai touché l'API de Tesla
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
Python pour passer d'une autre langue
[Python] Comment utiliser l'API Typetalk
Utiliser l'API Google Analytics de Python
[Python] Créer une API pour envoyer Gmail
Gérer l'API SOAP depuis Python (Zeep)
N'a pas changé de Python 2 à 3
Mettre à jour Mac Python de 2 à 3
Faire une demande de Device Farm (appium python) à API Gateway
Touchons l'API Vision de Google de Python pour le moment
Collecter des informations sur Twitter avec Python (API Twitter)
[Python] Application Web à partir de 0! Pratique (3) - Mise en œuvre de l'API
[Python] Simulation de fluide: de linéaire à non linéaire
De Python à l'utilisation de MeCab (et CaboCha)
Comment mettre à jour Google Sheets à partir de Python
Manuel Python privé (mis à jour de temps en temps)
[python] Comment utiliser __command__, explication des fonctions
Je veux utiliser jar de python
Conversion de katakana en voyelle kana [python]
Notification push du serveur Python vers Android
Connexion de python à MySQL sur CentOS 6.4
J'ai essayé d'utiliser l'API UnityCloudBuild de Python
Portage et modification du solveur de doublets de python2 vers python3.
Comment accéder à RDS depuis Lambda (python)
J'ai essayé de toucher l'API COTOHA
Python> Numéros de sortie de 1 à 100, 501 à 600> Pour csv
J'ai essayé de toucher Python (syntaxe de base)
Convertir de Markdown en HTML en Python
[Amazon Linux] Passage de la série Python 2 à la série Python 3
Envoyer un message de Slack à un serveur Python
Modifier Excel à partir de Python pour créer un tableau croisé dynamique
Comment ouvrir un navigateur Web à partir de python