import os from json import JSONEncoder import requests from django.contrib import messages from django.contrib.auth import authenticate, login from django.contrib.auth.decorators import login_required from django.contrib.auth.mixins import LoginRequiredMixin 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(LoginRequiredMixin, 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') @login_required 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_user = authenticate(username=username, password=password) if authenticated_user is None: messages.add_message(request, messages.ERROR, 'Неправильное имя пользователя и/или пароль') return HttpResponseRedirect(reverse('authenticate')) else: messages.add_message(request, messages.SUCCESS, 'Поздравляю, вы вошли успешно') login(request, user=authenticated_user) return HttpResponseRedirect(reverse('new-article'))