Browse Source

Merge pull request 'Реализовал доступ к ВК по опознаку (token)' (#48) from vk_auth into master

Reviewed-on: #48
master
parent
commit
75af7b0b79
  1. 32
      README.md
  2. 25
      cms/promoters.py
  3. 2
      crossposting_backend/settings.py

32
README.md

@ -22,24 +22,30 @@
например, https://mirocod.ru например, https://mirocod.ru
10. Ставим галочку "Разрешить клиентскую OAuth авторизацию". 10. Ставим галочку "Разрешить клиентскую OAuth авторизацию".
11. Выставляем права: 11. Выставляем права:
* Доступ к личной информации через OAuth (VALUABLE_ACCESS): Опционально * Доступ к личной информации через OAuth (VALUABLE_ACCESS): Опционально
* Получение длинных токенов OAuth (LONG_ACCESS_TOKEN): Опционально * Получение длинных токенов OAuth (LONG_ACCESS_TOKEN): Опционально
* Установка статуса (SET_STATUS): Не используется * Установка статуса (SET_STATUS): Не используется
* Изменение фотографий и фотоальбомов (PHOTO_CONTENT): Не используется * Изменение фотографий и фотоальбомов (PHOTO_CONTENT): Не используется
* Управление группами (GROUP_CONTENT): Обязательно * Управление группами (GROUP_CONTENT): Обязательно
11. Нажмите "Сохранить". 11. Нажмите "Сохранить".
12. Вам на почту придут ключи. 12. Вам на почту придут ключи.
13. Нажмите на кнопку "Получить новый" рядом с надписью "Вечный access_token". 13. Нажмите на кнопку "Получить новый" рядом с надписью "Вечный access_token".
14. Скопируйте значение "Вечный access_token" в .env-файл в корне вашего приложения, в качестве значения OK_ACCESS_TOKEN: 14. Скопируйте значение "Вечный access_token" в .env-файл в корне вашего приложения, в качестве значения OK_ACCESS_TOKEN:
15. Вставьте их в .env-файл в корне вашего приложения: 15. Вставьте их в .env-файл в корне вашего приложения:
* Публичный ключ приложения - в качестве значения OK_APPLICATION_KEY * Публичный ключ приложения - в качестве значения OK_APPLICATION_KEY
* Секретный ключ приложения - в качестве значения OK_APPLICATION_SECRET_KEY * Секретный ключ приложения - в качестве значения OK_APPLICATION_SECRET_KEY
## Настраиваем доступ к ВКонтакте ## Настраиваем доступ к ВКонтакте
1. Укажите логин, ваш email, под которым вы авторизуетесь в ВК, в качестве значения VK_LOGIN
2. Укажите пароль, в качестве значения VK_PASSWORD 1. Создайте приложение в ВК (standalone). Укажите в приложении сообщество
3. Укажите ид группы, добавьте к нему минус в начале. Т.е. если № группы 7002, то нужно указать -7002, в качестве значения VK_OWNER_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_TOKIN
5. Укажите id сообщества со знаком «-», в качестве значения VK_OWNER_ID
## Настраиваем доступ к телеграм ## Настраиваем доступ к телеграм
@ -50,42 +56,55 @@
5. Добавьте бота в админы группы 5. Добавьте бота в админы группы
6. Добавьте несколько тестовых сообщений в группу 6. Добавьте несколько тестовых сообщений в группу
7. Запустите команду: 7. Запустите команду:
``` ```
python3.8 manage.py get_telegram_group_id python3.8 manage.py get_telegram_group_id
``` ```
6. В результате будет выведен ид канала 6. В результате будет выведен ид канала
7. Вставьте полученный ид в .env-файл, переменная TELEGRAM_CHAT_ID 7. Вставьте полученный ид в .env-файл, переменная TELEGRAM_CHAT_ID
### Возможные ошибки ### Возможные ошибки
7. Если будет ошибка, что "Нет обновлений", значит, нужно прислать больше сообщений в группу и быстрее запустить команду. 7. Если будет ошибка, что "Нет обновлений", значит, нужно прислать больше сообщений в группу и быстрее запустить команду.
Возможно бот успевает прочитать обновления до вас. Возможно бот успевает прочитать обновления до вас.
# Задаём доступ к веб-интерфейсу # Задаём доступ к веб-интерфейсу
1. Зайдите по ssh на хостинг. 1. Зайдите по ssh на хостинг.
2. Зайдите по root. 2. Зайдите по root.
3. Активируйте виртуальное окружение: 3. Активируйте виртуальное окружение:
```shell ```shell
source /home/crossposting_env/bin/activate source /home/crossposting_env/bin/activate
``` ```
4. Перейдите в папку проекта: 4. Перейдите в папку проекта:
```shell ```shell
cd /var/www/crossposting/backend/current/ cd /var/www/crossposting/backend/current/
``` ```
5. Запустите консоль django: 5. Запустите консоль django:
```shell ```shell
python3.8 manage.py shell python3.8 manage.py shell
``` ```
1. Выполните команду на python: 1. Выполните команду на python:
```python ```python
from django.contrib.auth.models import User from django.contrib.auth.models import User
``` ```
2. Создайте пользователя, под которым будете авторизоваться. Укажите своё имя пользователя, электропочту и пароль: 2. Создайте пользователя, под которым будете авторизоваться. Укажите своё имя пользователя, электропочту и пароль:
```python ```python
user = User.objects.create_user(username='user', email='user@mail.pro', password='123123123') user = User.objects.create_user(username='user', email='user@mail.pro', password='123123123')
``` ```
3. Выйти из консоли: 3. Выйти из консоли:
```python ```python
quit() quit()
``` ```
@ -99,15 +118,18 @@ quit()
4. Далее создайте .env-файл и укажите незашифрованные доступы к социальным сетям. 4. Далее создайте .env-файл и укажите незашифрованные доступы к социальным сетям.
5. В crossposting_backend/private/settings.py значение ENV_ENCODED д.б. False. 5. В crossposting_backend/private/settings.py значение ENV_ENCODED д.б. False.
6. Перезапустите веб-приложение: 6. Перезапустите веб-приложение:
```shell ```shell
supervisorctl restart crossposting_django supervisorctl restart crossposting_django
``` ```
7. Выполните команду для шифровки: 7. Выполните команду для шифровки:
python3.8 manage.py encode_file python3.8 manage.py encode_file
8. В результате будет создан файл .env.encoded 8. В результате будет создан файл .env.encoded
9. Замените .env созданным файлом .env.encoded 9. Замените .env созданным файлом .env.encoded
10. В crossposting_backend/private/settings.py значение ENV_ENCODED замените на True. 10. В crossposting_backend/private/settings.py значение ENV_ENCODED замените на True.
11. Перезапустите веб-приложение: 11. Перезапустите веб-приложение:
```shell ```shell
supervisorctl restart crossposting_django supervisorctl restart crossposting_django
``` ```

25
cms/promoters.py

@ -37,21 +37,22 @@ class TelegramPromoter(Promoter):
class VkontaktePromoter(Promoter): class VkontaktePromoter(Promoter):
def promote(self): def promote(self):
vk_login = promoter_secrets['VK_LOGIN']
vk_password = promoter_secrets['VK_PASSWORD']
vk_owner_id = promoter_secrets['VK_OWNER_ID'] vk_owner_id = promoter_secrets['VK_OWNER_ID']
vk_token = promoter_secrets['VK_TOKEN']
import vk_api from_group = 1
session = vk_api.VkApi(login=vk_login,
password=vk_password)
session.auth()
api = session.get_api()
try: try:
api.wall.post(owner_id=vk_owner_id, requests.post('https://api.vk.com/method/wall.post',
message=self.article.body, params={
attachments=self.article.link) 'access_token': vk_token,
except vk_api.VkApiError as exc: '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) raise PromoteError(exc)

2
crossposting_backend/settings.py

@ -41,7 +41,7 @@ dotenv.read_dotenv(env_file)
promoter_env_keys = ( promoter_env_keys = (
'TELEGRAM_BOT_TOKEN', 'TELEGRAM_CHAT_ID', 'JOOMLA_TOKEN', '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', 'OK_APPLICATION_SECRET_KEY', 'OK_GROUP_ID',
) )
promoter_secrets = {} promoter_secrets = {}

Loading…
Cancel
Save