Merge pull request 'Реализовал доступ к ВК по опознаку (token)' (#48) from vk_auth into master
Reviewed-on: http://pulsdel.ru/MIROCOD/CrossPosting/pulls/48
This commit is contained in:
commit
75af7b0b79
52
README.md
52
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=https://oauth.vk.com/blank.html&display=page&response_type=token&revoke=1
|
||||
3. После этого в вашей адресной строке появится необходимый ключ. Он копируется вручную: после access\_token= и перед &expires\_in.
|
||||
4. Укажите токен, в качестве значения VK_TOKIN
|
||||
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
|
||||
```
|
||||
|
@ -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)
|
||||
|
||||
|
||||
|
@ -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 = {}
|
||||
|
Loading…
x
Reference in New Issue
Block a user