cross-posting/cms/views.py

112 lines
3.8 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import os
from json import JSONEncoder
import requests
from django.contrib.auth import authenticate
from django.http import HttpRequest, HttpResponseRedirect
from django.shortcuts import render
from django.urls import reverse
from django.views import View
from cms.forms import ArticleForm, UserForm
from cms.models import Article
class ArticleView(View):
def _promote_to_telegram(self, article: Article):
bot_token = os.getenv('TELEGRAM_BOT_TOKEN')
channel_id = os.getenv('TELEGRAM_CHAT_ID')
long_text = f'{article.body}\n{article.link}'
send_message_url = f'https://api.telegram.org/bot{bot_token}/sendMessage?chat_id={channel_id}&text={long_text}'
response = requests.get(send_message_url)
result = response.json()
if result['ok']:
print('Мы послали сообщение, ура!')
else:
print('Похоже, нас послали доделывать приложение :-(')
def _promote_to_vk(self, article: Article):
import vk_api
vk_login = os.getenv('VK_LOGIN')
vk_password = os.getenv('VK_PASSWORD')
vk_owner_id = os.getenv('VK_OWNER_ID')
session = vk_api.VkApi(login=vk_login,
password=vk_password)
session.auth()
api = session.get_api()
api.wall.post(owner_id=vk_owner_id,
message=article.body,
attachments=article.link)
def _promote_to_ok(self, article: Article):
import ok_api
ok_access_token = os.getenv('OK_ACCESS_TOKEN')
ok_application_key = os.getenv('OK_APPLICATION_KEY')
ok_application_secret_key = os.getenv('OK_APPLICATION_SECRET_KEY')
session = ok_api.OkApi(access_token=ok_access_token,
application_key=ok_application_key,
application_secret_key=ok_application_secret_key)
attachments = {
'media': [
{
'type': 'text',
'text': article.body,
},
{
'type': 'link',
'url': article.link,
},
]
}
encoded_attachments = JSONEncoder().encode(attachments)
session.mediatopic.post(type='GROUP_THEME',
gid='70000001426867',
attachment=encoded_attachments)
def post(self, request: HttpRequest):
post_data = request.POST
article = Article.objects.create(body=post_data['body'],
link=post_data['link'])
self._promote_to_telegram(article)
self._promote_to_ok(article)
self._promote_to_vk(article)
return render(request, template_name='articles/created.html')
def new_article(request):
article_form = ArticleForm()
article_context = {
'new_article_form': article_form
}
return render(request,
template_name='articles/new.html',
context=article_context)
class AuthenticationView(View):
def get(self, request, *args, **kwargs):
user_form = UserForm()
auth_context = {
'user_form': user_form,
}
return render(request,
'user/sign_in.html',
context=auth_context)
def post(self, request, *args, **kwargs):
username = request.POST['username']
password = request.POST['password']
authenticated = authenticate(username=username,
password=password)
if authenticated:
return HttpResponseRedirect(reverse('new-article'))
else:
return HttpResponseRedirect(reverse('authenticate'))