From 15efeb086a777975f574a04fe7c4fa333bba8dca Mon Sep 17 00:00:00 2001 From: Alexander Popov Date: Sat, 4 May 2019 02:09:46 +0300 Subject: [PATCH] 1.0 --- .gitignore | 1 + .preview.png | Bin 0 -> 8646 bytes LICENSE | 24 ++++++++++++++++ README.md | 35 +++++++++++++++++++++++ config.json.example | 7 +++++ systemd/user/vk0nline.service | 6 ++++ systemd/user/vk0nline.timer | 11 ++++++++ vk0nline.py | 51 ++++++++++++++++++++++++++++++++++ 8 files changed, 135 insertions(+) create mode 100644 .gitignore create mode 100644 .preview.png create mode 100644 LICENSE create mode 100644 README.md create mode 100644 config.json.example create mode 100644 systemd/user/vk0nline.service create mode 100644 systemd/user/vk0nline.timer create mode 100644 vk0nline.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..d344ba6 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +config.json diff --git a/.preview.png b/.preview.png new file mode 100644 index 0000000000000000000000000000000000000000..58c8285026f900f9fb5f6c71b535e6477b150fb9 GIT binary patch literal 8646 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 literal 0 HcmV?d00001 diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..cf1ab25 --- /dev/null +++ b/LICENSE @@ -0,0 +1,24 @@ +This is free and unencumbered software released into the public domain. + +Anyone is free to copy, modify, publish, use, compile, sell, or +distribute this software, either in source code form or as a compiled +binary, for any purpose, commercial or non-commercial, and by any +means. + +In jurisdictions that recognize copyright laws, the author or authors +of this software dedicate any and all copyright interest in the +software to the public domain. We make this dedication for the benefit +of the public at large and to the detriment of our heirs and +successors. We intend this dedication to be an overt act of +relinquishment in perpetuity of all present and future rights to this +software under copyright law. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +For more information, please refer to diff --git a/README.md b/README.md new file mode 100644 index 0000000..5221117 --- /dev/null +++ b/README.md @@ -0,0 +1,35 @@ +# vk.com set online status service +Набор инструментов для поддержания твоего статуса в социальной сети Vk.com __"Онлайн"__ +![preview](https://raw.githubusercontent.com/iiiypuk/vk0nline/master/.preview.png) +Набор включает в себя скрипт на `Python` и юнит `systemd`. + +## Установка: ++ Скачать и распаковать набор инструметов, например в `/home/user_name/.vk0nline` ++ Создать директорию для юнитов systemd: `mkdir -p ~/.config/systemd/user` +и перейти в неё: `cd ~/.config/systemd/user` ++ Сделать символические ссылки на сервис и таймер: +``` +ln -s /home/user_name/.vk0nline/systemd/user/vk0nline.service . +ln -s /home/user_name/.vk0nline/systemd/user/vk0nline.timer . +``` ++ Изменить настройки скрипта и сделать его исполняемым: +``` +cd ~/.vk0nline/ +mv config.json.example config.json +chmod 755 ./vk0nline.py +edit config.json +``` ++ Прописать полный путь к файлу конфигурации в скрипте: +```python +# EDIT IT +with open('./config.json', 'r', encoding='utf-8') as f: +``` ++ Прописать полный путь к файлу скрипта в сервисе systemd: +`edit ~/.config/systemd/user/vk0nline.service` +`ExecStart=/full/path/to/vk0nline.py` ++ Активируем и запускаем скрипт: +``` +systemctl start vk0nline.service --user +systemctl enable vk0nline.timer --user +systemctl start vk0nline.timer --user +``` diff --git a/config.json.example b/config.json.example new file mode 100644 index 0000000..2e544cd --- /dev/null +++ b/config.json.example @@ -0,0 +1,7 @@ +{ + "clientId": 1, + "secureKey": "", + "serviceKey": "", + "accessToken": "", + "userIds": "" +} diff --git a/systemd/user/vk0nline.service b/systemd/user/vk0nline.service new file mode 100644 index 0000000..ad09490 --- /dev/null +++ b/systemd/user/vk0nline.service @@ -0,0 +1,6 @@ +[Unit] +Description=vk.com set online status service + +[Service] +Type=simple +ExecStart=/full/path/to/vk0nline.py diff --git a/systemd/user/vk0nline.timer b/systemd/user/vk0nline.timer new file mode 100644 index 0000000..99628c5 --- /dev/null +++ b/systemd/user/vk0nline.timer @@ -0,0 +1,11 @@ +[Unit] +Description=vk.com set online status timer + +[Timer] +OnBootSec=1min +OnUnitActiveSec=4min +Persistent=true +Unit=vk0nline.service + +[Install] +WantedBy=multi-user.target diff --git a/vk0nline.py b/vk0nline.py new file mode 100644 index 0000000..e8ce062 --- /dev/null +++ b/vk0nline.py @@ -0,0 +1,51 @@ +#!/usr/bin/env python3 + +import json +import requests +from datetime import datetime + +__author__ = 'Alexander Popov' +__copyright__ = '2019 by iiiypuk' +__credits__ = ['Alexander Popov'] +__license__ = 'Unlicense' +__version__ = '1.0.0' +__maintainer__ = 'Alexander Popov' +__email__ = 'iiiypuk@fastmail.fm' +__status__ = 'Production' + +# EDIT IT +with open('./config.json', 'r', encoding='utf-8') as f: + _C = json.load(f) + +def getStatus(): + response = requests.get('https://api.vk.com/method/users.get?' + \ + 'fields=online,last_seen&v=5.95' + \ + '&access_token={key}&user_ids={user}'.format( + key=_C['serviceKey'], user=_C['userIds'])) + + userLoginTime = json.loads(response.content.decode('utf-8'))['response'][0]['last_seen']['time'] + userOnline = json.loads(response.content.decode('utf-8'))['response'][0]['online'] + + return([userOnline, userLoginTime]) + +def setOnline(): + response = requests.get('https://api.vk.com/method/account.setOnline' + \ + '?voip=0&v=5.95&access_token={key}'.format(key=_C['accessToken']) + \ + '&user_ids={user}'.format(user=_C['userIds'])) + content = json.loads(response.content.decode('utf-8')) + + if 'error' in content: + if 5 == content['error']['error_code']: # User authorization failed + print('User authorization failed.\nOpen this link in browser, and copy access token.') + print('https://oauth.vk.com/authorize?client_id={appid}'.format(appid=_C['clientId']) + \ + '&redirect_uri=vk.com&display=mobile&response_type=' + \ + 'token&v=5.95&revoke=1&state=01010&scope=offline') + else: + print('Error: {}.'.format(content['error']['error_code'])) + elif 'response' in content: + if 1 == content['response']: + print('Ok!') + onlineStatus, lastSeen = getStatus() + print(onlineStatus, datetime.fromtimestamp(lastSeen).strftime('%Y-%m-%d %H:%M:%S')) + +if __name__ == "__main__": setOnline()