...
Just my blog

Blog about everything, mostly about tech stuff I made. Here is the list of stuff I'm using at my blog. Feel free to ask me about implementations.

Soft I recommend
Py lib I recommend

I'm using these libraries so you can ask me about them.

Django fast hints

Here some fast hints to remember: Migration:

cd ~/myproject
python manage.py makemigrations
python manage.py migrate

  Alias /static/ "/var/www/smm_tools/site/"  

Read...

Вождь Бот возможности и функции

[caption id="attachment_2226" align="alignright" width="297"]Вождь Бот Вождь Бот[/caption] "Вождь Бот" это автоматизированная система ведения рубрик в сообществах и группах в социальных сетях "Вконтакте" и "Facebook" (частично).   Над его разработкой трудится пока только один человек, поэтому многие новые функции будут еще появляться, а улучшение уже существующих может занимать много времени. У проекта пока даже нет веб-версии, которая могла бы служить центром управления этими функциями, поэтому их настройка пока происходит вручную, лично разработчиком и частично администратором группы, к которой система будет подключаться.   Возможности системы "Вождь Бот" на данный момент следующие:

Возможности Вождь Бота:

  1. Поздравление участников группы с днем рождения: https://vk.com/wall-46631810_451052
  2. Прогнозы погоды:
  3. Публикация списка последних 100 забаненных пользователей: https://vk.com/wall-46631810_449891
  4. Проверка наличия предложенных новостей в нескольких группах, и кол-во постов уже вышедших на стену.
  5. Автоматическое удаление комментариев, которые оставили не участники группы (вроде антиспама).
  6. Выбор случайного (random) участника по конкурсам репостов сразу …

Read...

python script as centos service

Task completed!py_vk I made a vkontakte Bot which delete all comments are not from group members! But I do not want to run it by cron, because it will SPAM all my system with cron emails. But I found resolution:

  • make a worker.py
  • allow worker to run delete scripts on time periods
  • add worker as centos service
  • have fun!

Maybe later I'll add more code, but now just for example I'll show only worker and bash script:

#!/usr/local/bin/python3
# coding=utf-8

from time import strftime, sleep
import schedule
from vk_del_comments import *
from vk_del_comments_older import *
import os

pid = os.getpid()
op = open("/var/us.pid","w")
op.write("%s" % pid)
op.close()

token = ''
tk_owner_id = "-000000000"
tk_group_id = "000000000"
tk_domain = "group_domain"

curr_date = strftime("%d-%m-%Y - %H:%M:%S")
logFile = 'comments_deleter_log.txt'

# print("Start Comments Bot Worker!")

def del_comments_30_sec():
    del_comments_regular(logFile, token, tk_owner_id, tk_group_id, tk_domain)

def del_comments_5_min():
    delete_comments_older(logFile, token, tk_owner_id, tk_group_id, tk_domain)


# schedule.every(30).seconds.do(del_regular_comments_19)
schedule.every(30).seconds.do(del_comments_30_sec)
schedule.every(5).minutes.do(del_comments_5_min)

while …

Read...

How tired I am of Google way how get API tokens

Google APIYou must:

  1. Create application and take its id and secret.
  2. Make a GET request to send secret and id with needed scopes of access.
  3. Obtain TEMPORARY access token and refresh token (first lives about 3000 - 5000 sec, the second can probably live infinite)
  4. Use this access token to GET something through REST, check if this token is not expires already.
  5. You want to GET something ELSE? First check if your token is not expired, then if expired - use refresh token to get NEW TEMPORARY token.
  6. Do something else.

Nice turn google! You are the best of masters of creating shitcode. Before starting real work on google API and my own project with Google Drive I'll learn pythons "requests" perfectly, first! Thanks google you will make me smarter! Example of shitcode which is needed to get the token first, then check if it is not expired and then request NEW …

Read...

Better, then best vk execute and python part. 2

Крайняя степень эффективности.py_vk Теперь скрипт не парсит данные, их парсит сам ВК и возвращает мне лишь списки: айди, комменты, репосты и т.п. Для каждого набора свой список - длина списков всегда одинакова. Дело в том, что ВК не позволяет производить более 24-х итераций за раз в vk execute, поэтому, прежде чем отправить списки постов, я дроблю их на группы по 20. Мало того, благодаря вот этому вкраплению: https://toster.ru/q/234399 я теперь могу производить сбор постов по 100 штук по 20 раз за итерацию в Python, то есть на стороне ВК происходит 20 итераций по 100 постов за одну итерацию в python Далее списки zipаются в один большой список списков по 2000 элементов в каждом. Based on: http://www.trianglesis.org.ua/python-i-vk-execute-40-tysyach-postov-za-3-minuty Время выполнения сократилось почти в два раза! 40 тысяч элементов за полторы минуты! Уже даже не знаю, можно ли быстрее или потолок в высшей степени проходимости сети.

Bot has started it's work …

Read...

Python и vk execute = 40 тысяч постов за 3 минуты!

Да, сучка, это Python и vk execute!py_vk Собрать 39000 постов за 3 минуты! Закончил очередную партию парсеров, теперь этот парсер умеет делать сбор постов несколько быстрее, чем раньше. В прошлый раз, одними только силами Python while - мне удалось спарсить стену с 39 тысячами постов минимум за 15-20 минут, при этом с вероятностью в 50% поймать timeout error и запускать все заново или дробить сбор постов по дате или кол-ву. Вуаля, упорство и немного логики:

Get posts from wall from VK wall.get
Posts present: 39143| Runs: 20| Iters: 20| Offset of posts is: 2000
Posts present: 39143| Runs: 20| Iters: 20| Offset of posts is: 4000
Posts present: 39143| Runs: 20| Iters: 20| Offset of posts is: 6000
Posts present: 39143| Runs: 20| Iters: 20| Offset of posts is: 8000
Posts present: 39143| Runs: 20| Iters: 20| Offset of posts is: 10000
Posts present: 39143| Runs: 20| Iters: 20| …

Read...

vk execute VS python while

Итак, финишная прамая на сегодня:py_vk

  • скрипт на Python, получающий комментарии из 57 постов за последних 7 дней
  • скрипт Python, отправляющий аргументы для vk execute порциями по 24 поста за раз со sleep(1) - во избежание флуда

Дано 57 постов и 797 комментариев под ними.

Старый вариант:

  • достается список элементов из таблицы БД где дата элемента между сегодня и -7 дней
  • для каждого изъятого из таблицы элемента с index[0] производится забор комментариев
    • если  index[1] - значение содержит число > 100 - значит в посте больше 100 комментов (ВК не отдает более 100 коментов за один запрос) то запустить while и счетчик, до тех пор, пока индекс итераций(offset_comments) не достигнет числа равному кол-ву комментов(post_com);
all_post_comments = []
for item in post_id_comm_list:
    post_id = item[0]
    post_com = int(item[1])
    if post_com > 100:
        offset_comments = 0                                     # Start value always = 0
        while offset_comments < post_com:                       # Until post comments count …

Read...

vk execute + args + python + requests

py_vk Продолжаю закреплять выученное своим горьким опытом и методом тыка по теме vk execute и python, наконец мои рученьки-загребученьки добрались до последнего оплота и просто приятного и некогда непонятного метода, и также к хранению процедур в приложении! Ура. В прошлом посте я рассказывал как передать строку с vk script сразу таки прям по воздуху, сырую и некрасивую, сегодня мне покорился вариант "хранимые процедуры" который позволяет тело скрипта хранить в приложении вк, а передавать по "воздуху" только необходимые и меняющиеся аргументы: id группы, id поста и так далее. Ближе к делу:

  • каждая переменная, которая будет записываться переданным аргументом должна иметь такой вид: Args.var_name

VK_proc

var comments = API.wall.getComments(
    {"owner_id":(Args.owner_id),
     "post_id":(Args.post_id),
     "need_likes":"1",
     "offset":"0",
     "count":"100",
     "sort":"asc",
     "preview_length":"1",
     "extended":"0",
     "v":"5.27"});
var comments_cnt = comments.count;
comments = comments.items;
var offset_comments = 100;
while (offset_comments < comments_cnt)
    {comments = comments + API.wall.getComments(
        {"owner_id":(Args.owner_id),
         "post_id":(Args.post_id),
         "need_likes":"1",
         "offset":(offset_comments),
         "count":"100",
         "sort":"asc",
         "preview_length":"1",
         "extended":"0",
         "v":"5.27"}
    ).items;
offset_comments = …

Read...

vk execute

https://vk.com/dev/execute py_vk Продолжаю линейку ознакомительных постов на тему "в мире эльфийских языков программирования" или "говнокод - как стиль жизни". Был вот такой вот пост, который вроде как-бы объяснял как сделать execute при помощи javascript и все такое: http://habrahabr.ru/post/248725/ но язык, которым была написана статья - выглядит настолько эльфийским, я уже не говорю про сраную разметку, которая съехала набикрень просто, как и моя голова, с несозревшими пайтоновскими правилами отступов тоже съехала. Так вот, пытаясь разобраться в этих письменах и отделить зерна от плевел, чтобы наконец понять, как работает этот долбанный vk execute мне пришлось убрать весь говнокод, чтобы найти чистый vk execute, также используя хорошую, но не очевидную, документацию ВК по ссылке выше, я смог родить то, чего пока, мне кажется, никто не родил: Простой и понятный пример того, как работает этот, ослицу его мать, vk execute. Вот очень простой пример while:

var a = 1;
var …

Read...

vk execute method working example on python 3

vk execute

vk execute

  РУС: Сраный интернет и хабрахабры просто завален всякими говнопримерами про vk execute method, каждый круче предыдущего, и никто так и не смог написать нормальный код, я два дня пытался читать тот эльфийский говнокод, в который хабровчанин превратил пайтон, силясь понять что он куда передает, до тех пор, пока не послал все к "%s собачим" и не сделал методом тыка сам. Все оказалось пипецки просто, смотрите сами, код внизу спокойно себе возвращает то, что нам нужно. python(vk execute method):

import requests

owner_id = "-PAGE_ID"
token = 'TOKEN'

# may use return%20API.wall.get where "%20" is for HTTP encode of space symbol
# also can work with regular space sybmol - in my version is working fine
r = requests.post('https://api.vk.com/method/execute?access_token='+token+'&code=return API.wall.get({"owner_id":"'+owner_id+'","count":"1"});')
response_data = r.json()
print(response_data)

Далее просто нужно будет разобраться, как работает этот вк скрипт и написать соотв. запросы для своих нужд. Передавать, как оказалось - можно в сыром виде, …

Read...