Быстрая регистрация и публикация на Mastodon'овых серверах + Автопост
Суть: Регистрируемся и быстро публикуемся на Mastodon'овых серверах.
То, что описано ниже, подходит больше для личного пользования, а не для распространяемого инструмента (приложения), так как исполнено довольно "грязновато".
1. Берём Mastodon.py (https://github.com/halcy/Mastodon.py).
2. Создаём приложение: "Настройки" -> "Разработчикам" -> "Новое приложение":
3. Заполняем данные приложения: Название, устанавливаем разрешения (read+write). Сохраняем изменения.
4. Создаём файл (APP_clientcred.secret) с таким содержанием:
КЛЮЧ_КЛИЕНТА // Берём из соотв.поля приложения СЕКРЕТ // Берём из соотв.поля приложения ССЫЛКА_НА_МАСТОДОН (напр. https://mastodon.social) НАЗВАНИЕ_ПРИЛОЖЕНИЯ
5. В адресную строку браузера вписываем:
https://ССЫЛКА_НА_МАСТОДОН/oauth/authorize?client_id=КЛЮЧ_КЛИЕНТА&response_type=code&redirect_uri=urn:ietf:wg:oauth:2.0:oob&scope=read+write&force_ogin=False&state=None
где "КЛЮЧ_КЛИЕНТА" — это тот ключ из "APP_clientcred.secret".
После этого нужно будет дать доступ приложению к нужным данным.
6. Необходим первый логин, для этого в Python файле пишем:
m = Mastodon(client_id="APP_clientcred.secret") m.log_in( username='ВАША_ПОЧТА', code = "КОД_КОТОРЫЙ_ВЫ_ПОЛУЧИЛИ_В_ПРЕДЫДУЩЕМ_ПУНКТЕ", scopes = ['read', 'write'], to_file = 'APP_usercred.secret' )
7. Запускаем Python файл, после чего у вас должен появиться "APP_usercred.secret".
8. Код выше можно закомментировать. Для дальнейшего использования достаточно написать:
m = Mastodon(access_token="APP_usercred.secret")
9. Чтобы опубликовать пост, пишем следующее:
m.status_post("Мой пост")
10. В итоге: Регистрируемся на сайте, создаём приложение, составляем из ключа клиента и секрета (+ ссылки на сайт и названия приложения) файл, используем ссылку с ключом клиента для получения кода для дачи доступа приложению и этим ключом входим. Это можно автоматизировать и зарегистрироваться на куче "инстансов" разом.
Пришёл к этому решению, так как публикация только на одной площадке — дело не очень доставляющее, а на других регистрация аккаунта с другой площадки невозможна (хотя вроде т.н. "федиверс"), а раскидываться постами хочется.
Можно легко написать bash-скрипт, который берёт условный текстовый файл и изображение (при его наличии) и отправляет Python файлам, отвечающим за постование на различных площадках. Они обрабатывают и постят где надо.
#!/bin/bash postfilename="$1" shift python3 ./en_mastodon_social.py "$postfilename" "$@" python3 ./en_mastodon_world.py "$postfilename" "$@" python3 ./en_masto.py "$postfilename" "$@"
m = Mastodon(access_token="APP_mastodon_social_usercred.secret") def read_text_from_file(ffile_path): with open(ffile_path, 'r', encoding='utf-8') as file: text = file.read().strip() return text def upload_media_files(fmastodon, fimage_paths): media_ids = [] for path in fimage_paths: media = fmastodon.media_post(media_file=path) media_ids.append(media['id']) return media_ids text_file_path = sys.argv[1] post_text = read_text_from_file(text_file_path) image_paths = sys.argv[2:] if post_text: media_ids = [] if image_paths: # Если есть фото -- прикрепить media_ids = upload_media_files(m, image_paths) m.status_post(post_text, media_ids=media_ids) print("+")
avtopost.sh ./posts/0001.txt '~/Pictures/kot.png' '~/Pictures/kot_pomenjshe.png'
Которая отправит на несколько мастодонов пост с содержимым из текстового файла "0001.txt" и картинками котиков.