From a55301131ce7fcfbedb797e029ebc37b1781bdfa Mon Sep 17 00:00:00 2001 From: Anton Date: Sat, 6 May 2023 00:52:08 +0300 Subject: [PATCH 1/4] =?UTF-8?q?=D0=A0=D0=B5=D0=B0=D0=BB=D0=B8=D0=B7=D0=BE?= =?UTF-8?q?=D0=B2=D0=B0=D0=BB=20=D0=B4=D0=BE=D1=81=D1=82=D1=83=D0=BF=20?= =?UTF-8?q?=D0=BA=20=D0=92=D0=9A=20=D0=BF=D0=BE=20=D0=BE=D0=BF=D0=BE=D0=B7?= =?UTF-8?q?=D0=BD=D0=B0=D0=BA=D1=83=20(token)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cms/promoters.py | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/cms/promoters.py b/cms/promoters.py index 6baf74a..dbdccd5 100644 --- a/cms/promoters.py +++ b/cms/promoters.py @@ -37,21 +37,22 @@ class TelegramPromoter(Promoter): class VkontaktePromoter(Promoter): def promote(self): - vk_login = promoter_secrets['VK_LOGIN'] - vk_password = promoter_secrets['VK_PASSWORD'] vk_owner_id = promoter_secrets['VK_OWNER_ID'] - - import vk_api - session = vk_api.VkApi(login=vk_login, - password=vk_password) - session.auth() - api = session.get_api() + vk_token = promoter_secrets['VK_TOKEN'] + from_group = 1 try: - api.wall.post(owner_id=vk_owner_id, - message=self.article.body, - attachments=self.article.link) - except vk_api.VkApiError as exc: + requests.post('https://api.vk.com/method/wall.post', + params={ + 'access_token': vk_token, + 'owner_id': vk_owner_id, + 'from_group': from_group, + 'message': self.article.body, + 'attachment': self.article.link, + 'signed': 0, + 'v': '5.131' + }) + except Exception as exc: raise PromoteError(exc) -- 2.11.0 From 5a074ccb693ee290712eb308ea9d9688d5f64253 Mon Sep 17 00:00:00 2001 From: Anton Date: Sat, 6 May 2023 22:47:40 +0300 Subject: [PATCH 2/4] =?UTF-8?q?=D0=BD=D0=B0=D0=BF=D0=B8=D1=81=D0=B0=D0=BB,?= =?UTF-8?q?=20=D0=BA=D0=B0=D0=BA=20=D1=81=D0=BE=D0=B7=D0=B4=D0=B0=D1=82?= =?UTF-8?q?=D1=8C=20=D0=BE=D0=BF=D0=BE=D0=B7=D0=BD=D0=B0=D0=BA=D0=B8=20?= =?UTF-8?q?=D0=B4=D0=BB=D1=8F=20=D0=B2=D0=BA=20#48?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 52 +++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 37 insertions(+), 15 deletions(-) diff --git a/README.md b/README.md index fc6b7b7..be71602 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Описание -Приложение для автопостинга содержимого со ссылкой в социальные сети. +Приложение для автопостинга содержимого со ссылкой в социальные сети. Приложение реализовано на Django 4.1. На данный момент реализован автопостинг в ВКонтакте, Одноклассники и телеграм. Автопостинг на уровне архитектуры реализован с помощью класса "Маркетолог" cms.promoters.Marketer. @@ -16,30 +16,36 @@ 4. Выбираем тип приложения "Пользовательское". 5. Ставим галочку "Пользовательское" 6. Заполняем описание. -7. Нажимаем "Добавить платформу". +7. Нажимаем "Добавить платформу". 8. Выбираем OAuth. -9. В списке разрешённых redirect_uri указываем URL вашего сайта, откуда будете производить кросспостинг, -например, https://mirocod.ru +9. В списке разрешённых redirect_uri указываем URL вашего сайта, откуда будете производить кросспостинг, + например, https://mirocod.ru 10. Ставим галочку "Разрешить клиентскую OAuth авторизацию". 11. Выставляем права: + * Доступ к личной информации через OAuth (VALUABLE_ACCESS): Опционально * Получение длинных токенов OAuth (LONG_ACCESS_TOKEN): Опционально * Установка статуса (SET_STATUS): Не используется * Изменение фотографий и фотоальбомов (PHOTO_CONTENT): Не используется * Управление группами (GROUP_CONTENT): Обязательно + 11. Нажмите "Сохранить". -12. Вам на почту придут ключи. +12. Вам на почту придут ключи. 13. Нажмите на кнопку "Получить новый" рядом с надписью "Вечный access_token". 14. Скопируйте значение "Вечный access_token" в .env-файл в корне вашего приложения, в качестве значения OK_ACCESS_TOKEN: 15. Вставьте их в .env-файл в корне вашего приложения: + * Публичный ключ приложения - в качестве значения OK_APPLICATION_KEY * Секретный ключ приложения - в качестве значения OK_APPLICATION_SECRET_KEY - ## Настраиваем доступ к ВКонтакте -1. Укажите логин, ваш email, под которым вы авторизуетесь в ВК, в качестве значения VK_LOGIN -2. Укажите пароль, в качестве значения VK_PASSWORD -3. Укажите ид группы, добавьте к нему минус в начале. Т.е. если № группы 7002, то нужно указать -7002, в качестве значения VK_OWNER_ID + +1. Создайте приложение в ВК (standalone). Укажите в приложении сообщество +2. Скопируйте ссылку ниже, укажите ID приложения. Вставьте ссылку в адресную строку браузере, нажмите Enter + https://oauth.vk.com/authorize?client\_id=**ID\_ПРИЛОЖЕНИЯ**&scope=wall,offline&redirect\_uri=http://api.vk.com/blank.html&display=page&response\_ENGINE=token +3. После этого в вашей адресной строке появится необходимый ключ. Он копируется вручную: после access\_token= и перед &expires\_in. +4. Укажите токен, в качестве значения VK_LOGIN +5. Укажите id сообщества со знаком «-», в качестве значения VK_OWNER_ID ## Настраиваем доступ к телеграм @@ -50,64 +56,80 @@ 5. Добавьте бота в админы группы 6. Добавьте несколько тестовых сообщений в группу 7. Запустите команду: + ``` python3.8 manage.py get_telegram_group_id ``` + 6. В результате будет выведен ид канала 7. Вставьте полученный ид в .env-файл, переменная TELEGRAM_CHAT_ID ### Возможные ошибки -7. Если будет ошибка, что "Нет обновлений", значит, нужно прислать больше сообщений в группу и быстрее запустить команду. -Возможно бот успевает прочитать обновления до вас. +7. Если будет ошибка, что "Нет обновлений", значит, нужно прислать больше сообщений в группу и быстрее запустить команду. + Возможно бот успевает прочитать обновления до вас. # Задаём доступ к веб-интерфейсу 1. Зайдите по ssh на хостинг. 2. Зайдите по root. 3. Активируйте виртуальное окружение: + ```shell source /home/crossposting_env/bin/activate ``` + 4. Перейдите в папку проекта: + ```shell cd /var/www/crossposting/backend/current/ ``` + 5. Запустите консоль django: + ```shell python3.8 manage.py shell ``` + 1. Выполните команду на python: + ```python from django.contrib.auth.models import User ``` + 2. Создайте пользователя, под которым будете авторизоваться. Укажите своё имя пользователя, электропочту и пароль: + ```python user = User.objects.create_user(username='user', email='user@mail.pro', password='123123123') ``` + 3. Выйти из консоли: + ```python quit() ``` # Шифруем .env-файл -1. По умолчанию настройка шифрования в crossposting_backend/private/settings.py ENV_ENCODED равна False. Это означает, -что .env-файл не шифрован. +1. По умолчанию настройка шифрования в crossposting_backend/private/settings.py ENV_ENCODED равна False. Это означает, + что .env-файл не шифрован. 2. Если нужно повысить защищённость данных, то шифруем .env-файл. -3. Если у вас уже зашифрован .env-файл, то на всякий случай создайте резервную копию этого файла. +3. Если у вас уже зашифрован .env-файл, то на всякий случай создайте резервную копию этого файла. 4. Далее создайте .env-файл и укажите незашифрованные доступы к социальным сетям. 5. В crossposting_backend/private/settings.py значение ENV_ENCODED д.б. False. 6. Перезапустите веб-приложение: + ```shell supervisorctl restart crossposting_django ``` + 7. Выполните команду для шифровки: -python3.8 manage.py encode_file + python3.8 manage.py encode_file 8. В результате будет создан файл .env.encoded 9. Замените .env созданным файлом .env.encoded 10. В crossposting_backend/private/settings.py значение ENV_ENCODED замените на True. 11. Перезапустите веб-приложение: + ```shell supervisorctl restart crossposting_django ``` -- 2.11.0 From 75bc737264973fc0b4a34fd8ffb32219d8db7abd Mon Sep 17 00:00:00 2001 From: Anton Date: Sat, 6 May 2023 23:59:22 +0300 Subject: [PATCH 3/4] =?UTF-8?q?=D0=BD=D0=B0=D0=BF=D0=B8=D1=81=D0=B0=D0=BB,?= =?UTF-8?q?=20=D0=BA=D0=B0=D0=BA=20=D1=81=D0=BE=D0=B7=D0=B4=D0=B0=D1=82?= =?UTF-8?q?=D1=8C=20=D0=BE=D0=BF=D0=BE=D0=B7=D0=BD=D0=B0=D0=BA=D0=B8=20?= =?UTF-8?q?=D0=B4=D0=BB=D1=8F=20=D0=B2=D0=BA(=D0=B8=D1=81=D0=BF=D1=80?= =?UTF-8?q?=D0=B0=D0=B2=D0=B8=D0=BB=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BA=D1=83?= =?UTF-8?q?=20=D0=B2=20=D0=BE=D0=BF=D0=B8=D1=81=D0=B0=D0=BD=D0=B8=D0=B8)+?= =?UTF-8?q?=D1=83=D0=B1=D1=80=D0=B0=D0=BB=20=D0=BB=D0=B8=D1=88=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=20=D0=B7=D0=BD=D0=B0=D1=87=D0=B5=D0=BD=D0=B8=D1=8F=20?= =?UTF-8?q?=D0=B8=D0=B7=20promoter=5Fenv=5Fkeys=20=D0=B8=20=20=D0=B4=D0=BE?= =?UTF-8?q?=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB=20VK=5FTOKEN=20=20#48?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 4 ++-- crossposting_backend/settings.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index be71602..df535eb 100644 --- a/README.md +++ b/README.md @@ -41,8 +41,8 @@ ## Настраиваем доступ к ВКонтакте 1. Создайте приложение в ВК (standalone). Укажите в приложении сообщество -2. Скопируйте ссылку ниже, укажите ID приложения. Вставьте ссылку в адресную строку браузере, нажмите Enter - https://oauth.vk.com/authorize?client\_id=**ID\_ПРИЛОЖЕНИЯ**&scope=wall,offline&redirect\_uri=http://api.vk.com/blank.html&display=page&response\_ENGINE=token +2. Скопируйте ссылку ниже, укажите ID приложения и группы. Вставьте ссылку в адресную строку браузере, нажмите Enter + https://oauth.vk.com/authorize?client_id=ID-ПРИЛОЖЕНИЯ&scope=8192&redirect_uri=https://oauth.vk.com/blank.html&display=page&response_type=token&group_ids=ID-ГРУППЫ 3. После этого в вашей адресной строке появится необходимый ключ. Он копируется вручную: после access\_token= и перед &expires\_in. 4. Укажите токен, в качестве значения VK_LOGIN 5. Укажите id сообщества со знаком «-», в качестве значения VK_OWNER_ID diff --git a/crossposting_backend/settings.py b/crossposting_backend/settings.py index 14f2842..8ceb290 100644 --- a/crossposting_backend/settings.py +++ b/crossposting_backend/settings.py @@ -41,7 +41,7 @@ dotenv.read_dotenv(env_file) promoter_env_keys = ( 'TELEGRAM_BOT_TOKEN', 'TELEGRAM_CHAT_ID', 'JOOMLA_TOKEN', - 'VK_LOGIN', 'VK_PASSWORD', 'VK_OWNER_ID', 'OK_ACCESS_TOKEN', 'OK_APPLICATION_KEY', + 'VK_OWNER_ID', 'VK_TOKEN', 'OK_ACCESS_TOKEN', 'OK_APPLICATION_KEY', 'OK_APPLICATION_SECRET_KEY', 'OK_GROUP_ID', ) promoter_secrets = {} -- 2.11.0 From feef98c55eeb8787dfa6ea8093ee6fbbbaf7909f Mon Sep 17 00:00:00 2001 From: Anton Date: Sun, 7 May 2023 17:28:54 +0300 Subject: [PATCH 4/4] =?UTF-8?q?=D0=B2=20README=20=D1=83=D0=BA=D0=B0=D0=B7?= =?UTF-8?q?=D0=B0=D0=BB=20=D0=BF=D1=80=D0=B0=D0=B2=D0=B8=D0=BB=D1=8C=D0=BD?= =?UTF-8?q?=D1=83=D1=8E=20=D1=81=D1=81=D1=8B=D0=BB=D0=BA=D1=83=20=D0=B4?= =?UTF-8?q?=D0=BB=D1=8F=20=D0=BF=D0=BE=D0=BB=D1=83=D1=87=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D1=8F=20=D1=82=D0=BE=D0=BA=D0=B5=D0=BD=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index df535eb..e57d6c1 100644 --- a/README.md +++ b/README.md @@ -41,10 +41,10 @@ ## Настраиваем доступ к ВКонтакте 1. Создайте приложение в ВК (standalone). Укажите в приложении сообщество -2. Скопируйте ссылку ниже, укажите ID приложения и группы. Вставьте ссылку в адресную строку браузере, нажмите Enter - https://oauth.vk.com/authorize?client_id=ID-ПРИЛОЖЕНИЯ&scope=8192&redirect_uri=https://oauth.vk.com/blank.html&display=page&response_type=token&group_ids=ID-ГРУППЫ +2. Скопируйте ссылку ниже, укажите ID приложения.Вставьте ссылку в адресную строку браузере, нажмите Enter + https://oauth.vk.com/authorize?client_id=ID-приложения&scope=wall,offline&redirect_uri=https://oauth.vk.com/blank.html&display=page&response_type=token&revoke=1 3. После этого в вашей адресной строке появится необходимый ключ. Он копируется вручную: после access\_token= и перед &expires\_in. -4. Укажите токен, в качестве значения VK_LOGIN +4. Укажите токен, в качестве значения VK_TOKIN 5. Укажите id сообщества со знаком «-», в качестве значения VK_OWNER_ID ## Настраиваем доступ к телеграм -- 2.11.0