try update existing mastodon status
This commit is contained in:
parent
7329638567
commit
4eec1c1c57
3 changed files with 22 additions and 6 deletions
|
@ -10,7 +10,7 @@ from django.utils import timezone
|
||||||
from django.core.paginator import Paginator
|
from django.core.paginator import Paginator
|
||||||
from mastodon import mastodon_request_included
|
from mastodon import mastodon_request_included
|
||||||
from mastodon.models import MastodonApplication
|
from mastodon.models import MastodonApplication
|
||||||
from mastodon.api import post_toot, TootVisibilityEnum, share_collection
|
from mastodon.api import share_collection
|
||||||
from common.utils import PageLinksGenerator
|
from common.utils import PageLinksGenerator
|
||||||
from common.views import PAGE_LINK_NUMBER, jump_or_scrape, go_relogin
|
from common.views import PAGE_LINK_NUMBER, jump_or_scrape, go_relogin
|
||||||
from common.models import SourceSiteEnum
|
from common.models import SourceSiteEnum
|
||||||
|
|
|
@ -9,6 +9,7 @@ from django.shortcuts import reverse
|
||||||
from urllib.parse import quote
|
from urllib.parse import quote
|
||||||
from .models import CrossSiteUserInfo, MastodonApplication
|
from .models import CrossSiteUserInfo, MastodonApplication
|
||||||
from mastodon.utils import rating_to_emoji
|
from mastodon.utils import rating_to_emoji
|
||||||
|
import re
|
||||||
|
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
@ -63,6 +64,7 @@ TWITTER_API_TOKEN = 'https://api.twitter.com/2/oauth2/token'
|
||||||
USER_AGENT = f"{settings.CLIENT_NAME}/1.0"
|
USER_AGENT = f"{settings.CLIENT_NAME}/1.0"
|
||||||
|
|
||||||
get = functools.partial(requests.get, timeout=settings.MASTODON_TIMEOUT)
|
get = functools.partial(requests.get, timeout=settings.MASTODON_TIMEOUT)
|
||||||
|
put = functools.partial(requests.put, timeout=settings.MASTODON_TIMEOUT)
|
||||||
post = functools.partial(requests.post, timeout=settings.MASTODON_TIMEOUT)
|
post = functools.partial(requests.post, timeout=settings.MASTODON_TIMEOUT)
|
||||||
|
|
||||||
|
|
||||||
|
@ -78,7 +80,7 @@ def get_relationships(site, id_list, token): # no longer in use
|
||||||
return response.json()
|
return response.json()
|
||||||
|
|
||||||
|
|
||||||
def post_toot(site, content, visibility, token, local_only=False):
|
def post_toot(site, content, visibility, token, local_only=False, update_id=None):
|
||||||
headers = {
|
headers = {
|
||||||
'User-Agent': USER_AGENT,
|
'User-Agent': USER_AGENT,
|
||||||
'Authorization': f'Bearer {token}',
|
'Authorization': f'Bearer {token}',
|
||||||
|
@ -90,6 +92,10 @@ def post_toot(site, content, visibility, token, local_only=False):
|
||||||
'text': content if len(content) <= 150 else content[0:150] + '...'
|
'text': content if len(content) <= 150 else content[0:150] + '...'
|
||||||
}
|
}
|
||||||
response = post(url, headers=headers, json=payload)
|
response = post(url, headers=headers, json=payload)
|
||||||
|
if response.status_code == 201:
|
||||||
|
response.status_code = 200
|
||||||
|
if response.status_code != 200:
|
||||||
|
logger.error(f"Error {url} {response.status_code}")
|
||||||
else:
|
else:
|
||||||
url = 'https://' + site + API_PUBLISH_TOOT
|
url = 'https://' + site + API_PUBLISH_TOOT
|
||||||
payload = {
|
payload = {
|
||||||
|
@ -99,7 +105,10 @@ def post_toot(site, content, visibility, token, local_only=False):
|
||||||
if local_only:
|
if local_only:
|
||||||
payload['local_only'] = True
|
payload['local_only'] = True
|
||||||
try:
|
try:
|
||||||
response = post(url, headers=headers, data=payload)
|
if update_id:
|
||||||
|
response = put(url + '/' + update_id, headers=headers, data=payload)
|
||||||
|
if update_id is None or response.status_code != 200:
|
||||||
|
response = post(url, headers=headers, data=payload)
|
||||||
if response.status_code == 201:
|
if response.status_code == 201:
|
||||||
response.status_code = 200
|
response.status_code = 200
|
||||||
if response.status_code != 200:
|
if response.status_code != 200:
|
||||||
|
@ -402,7 +411,11 @@ def share_mark(mark):
|
||||||
tags = '\n' + user.get_preference().mastodon_append_tag.replace('[category]', str(mark.item.verbose_category_name)) if user.get_preference().mastodon_append_tag else ''
|
tags = '\n' + user.get_preference().mastodon_append_tag.replace('[category]', str(mark.item.verbose_category_name)) if user.get_preference().mastodon_append_tag else ''
|
||||||
stars = rating_to_emoji(mark.rating, MastodonApplication.objects.get(domain_name=user.mastodon_site).star_mode)
|
stars = rating_to_emoji(mark.rating, MastodonApplication.objects.get(domain_name=user.mastodon_site).star_mode)
|
||||||
content = f"{mark.translated_status}《{mark.item.title}》{stars}\n{mark.item.url}\n{mark.text}{tags}"
|
content = f"{mark.translated_status}《{mark.item.title}》{stars}\n{mark.item.url}\n{mark.text}{tags}"
|
||||||
response = post_toot(user.mastodon_site, content, visibility, user.mastodon_token)
|
update_id = None
|
||||||
|
if mark.shared_link: # "https://mastodon.social/@username/1234567890"
|
||||||
|
r = re.match(r'.+/(\w+)$', mark.shared_link) # might be re.match(r'.+/([^/]+)$', u) if Pleroma supports edit
|
||||||
|
update_id = r[1] if r else None
|
||||||
|
response = post_toot(user.mastodon_site, content, visibility, user.mastodon_token, False, update_id)
|
||||||
if response and response.status_code in [200, 201]:
|
if response and response.status_code in [200, 201]:
|
||||||
j = response.json()
|
j = response.json()
|
||||||
if 'url' in j:
|
if 'url' in j:
|
||||||
|
@ -428,7 +441,11 @@ def share_review(review):
|
||||||
visibility = TootVisibilityEnum.UNLISTED
|
visibility = TootVisibilityEnum.UNLISTED
|
||||||
tags = '\n' + user.get_preference().mastodon_append_tag.replace('[category]', str(review.item.verbose_category_name)) if user.get_preference().mastodon_append_tag else ''
|
tags = '\n' + user.get_preference().mastodon_append_tag.replace('[category]', str(review.item.verbose_category_name)) if user.get_preference().mastodon_append_tag else ''
|
||||||
content = f"发布了关于《{review.item.title}》的评论\n{review.url}\n{review.title}{tags}"
|
content = f"发布了关于《{review.item.title}》的评论\n{review.url}\n{review.title}{tags}"
|
||||||
response = post_toot(user.mastodon_site, content, visibility, user.mastodon_token)
|
update_id = None
|
||||||
|
if review.shared_link: # "https://mastodon.social/@username/1234567890"
|
||||||
|
r = re.match(r'.+/(\w+)$', review.shared_link) # might be re.match(r'.+/([^/]+)$', u) if Pleroma supports edit
|
||||||
|
update_id = r[1] if r else None
|
||||||
|
response = post_toot(user.mastodon_site, content, visibility, user.mastodon_token, False, update_id)
|
||||||
if response and response.status_code in [200, 201]:
|
if response and response.status_code in [200, 201]:
|
||||||
j = response.json()
|
j = response.json()
|
||||||
if 'url' in j:
|
if 'url' in j:
|
||||||
|
|
|
@ -10,7 +10,6 @@ from django.utils import timezone
|
||||||
from django.core.paginator import Paginator
|
from django.core.paginator import Paginator
|
||||||
from mastodon import mastodon_request_included
|
from mastodon import mastodon_request_included
|
||||||
from mastodon.models import MastodonApplication
|
from mastodon.models import MastodonApplication
|
||||||
from mastodon.api import post_toot, TootVisibilityEnum
|
|
||||||
from common.utils import PageLinksGenerator
|
from common.utils import PageLinksGenerator
|
||||||
from .models import *
|
from .models import *
|
||||||
from books.models import BookTag
|
from books.models import BookTag
|
||||||
|
|
Loading…
Add table
Reference in a new issue