В принципе данная идея возникла на желании оставить после себя что-то в этом мире после смерти, но на деле будет обыкновенное CR приложение, UD где то по дороге потерялось. Я вообще не профессионал и историю о том как не войти в it 8 лет программируя с дипломом СПО программиста можно наверное оставить для другого ресурса с матерным названием, но hr видимо виднее где берётся опыт которого у меня нет и знания деть не куда. А так как мы не профессионалы пойдём самым лёгким путём. Хватит лирики в прочем можно приступить. Цели:
Цель наполнить базу какими то данными, по идее подойдут любые. Проект будет состоять из нескольких частей
Скрапинг данных(хотя понимал бы я что значит это модное слово) из архива вк. т.е. сообщения.(Для повторения данной манипуляции необходимо скачать архив). Как получить архив гуглам умеют пользоваться все. В прочем если с bs4 пойдёт, что либо не так придётся тащить целый Selenium WebDriver как настоящий самоучный профессионал тестировщик, в любом случае база будет наполнена данными.
Базу будем использовать mySQL потому, что я с ней работал неоднократно в принципе можно использовать любую в любом случае будет всего 2 колонки одна с id поста, другая с текстом поста на стену. В принципе при должном опыте можно расщирить и использовать это в комрчиских целях создав полноценный клиент и автопостинг, но нам это не нужно ведь у самоучек опыта больше.
Цель написать wallpost в определённое время суток, по идее это просто 1 http запрос раз в сутки в бесконечном цикле, но мы будем использовать готовое решение библиотеку vk_api потому, да бы избежать ненужных ошибок.
Написать клиент который будет подключаться к базе, генерировать рандомное число и оставлять пост с сообщением. Скорее всего это будет Kiwy с билдом с помощью buildozer где вводишь адрес сервера с базой, токен вк и на стене постится случайное значение из списка полученного из базы.
Деплой этого добра на сервер с установленной ubuntu. На аренду которого нет средств, да и в принципе, что бы заниматься программированием средства не нужны, на перегревающемся нетбуке с авито за 1,5к. рублей можно писать. Только писать будете раза в 3 дольше и проклянёте всё на свете. Ну в принципе это опять для другого ресурса.
Это уже 3 приложения, но не суть важно ведь при должном опыте это всё можно сделать за пол часа, а главное безопастно. Ах да чуть, не забыл мы будем использовать страшный терминал по этому под win возможно немного иначе, но по идее всё должно работать на python v3.4+ в плане кода установки пакетов, могут отличаться с установленным ну и с двумя кликами в в принципе разберётесь. В любом случае это всё будет изначально на локальной машине.
Используемые технологии:
Python3, BS4, mySQL(на локальной машине мария в принципе с одной колонкой это вообще не важно), ubuntu.
Текстовый редактор: sublime-text
Окружение: Manjaro. в принципе шел скрипт будет работать на минт в версиях 19 и старше точно, убунту аналогично.
Это всё можно запихать в шел скрипт:
#!/bin/bash
mkdir project-vk-when-i-die
cd project-vk-when-i-die
python3 -m pip install virtualenv
python3 -m venv env
source env/bin/activate
python3 –m pip install beautifulsoup4 pipreqs requests pymysql vk_api html5lib
touch parse .py
subl .
Скрипт для парсинга архива вк и наполнения бд тестовыми данными parse.py:
import bs4,sys
from urllib.request import urlopen
import database
webpage = urlopen('file:///home/*/vk_arc/Archive/messages/16379605/messages0.html').read().decode('windows-1251')
soup = bs4.BeautifulSoup(webpage, 'html5lib')
text_arr = list()
for text in soup.findAll('div',{"class":"message"}):
text_arr.append(text.text)
for i in text_arr:
database.add_to_table(i)
new = database.get_from_db()
print(new[1])
Сообщения можно перебрать циклом по 50 итерацией, но мы делать этого естественно не будем ибо в падлу, база и так наполнена тестовыми данными, а нам большего и не надо.
Создать табличку mysql.
В прочем ничего сложного просто 2 колонки с максимальным значением, надеюсь с workbench либо консольным клиентом сможете самостоятельно разобраться потому заострять внимание на этом не стоит.
Create database VK;
USE VK;
CREATE TABLE post_text(
id int(254) NOT NULL AUTO_INCREMENT,
text varchar(16382),
PRIMARY KEY (id)
);
Отдельный файл для работы с субд database.py:
import pymysql.cursors,pymysql.err
import sys
db_table = 'post_text'
db_text = 'text'
connection = pymysql.connect(host='localhost',
user='root',
password='your_password*',
database='VK',
cursorclass=pymysql.cursors.SSCursor)
def get_from_db():
with connection.cursor() as cursor:
connection.autocommit(True)
result = list()
sql = f'SELECT {db_text} FROM {db_table}'
print(sql)
cursor.execute(sql)
for row in cursor:
result.append(row)
return result
def add_to_table(text):
with connection.cursor() as cursor:
sql = f"INSERT INTO {db_table} ({db_text}) VALUES (%s)"
cursor.execute(sql, text)
connection.commit()
По итогу, так как база наполнена тестовыми данными можно приступать дальшек постингу на стене данные файлы мы запускаем только 1 раз и для наполнения базы данных.
В прочем не стоит даже запариваться и будем делать пост в бесконечном цикле просто на стене с помощью библиотеки vk_api. Ибо в документации вк чёрт ногу сломит и вообще ничего не понятно, лучше конечно это делать одним пост запросом. При том что документация редко сходится с реальным кейсом, как они это любят говорить лучше понятным методом, тем более наша цель пост на стену раз в сутки в 4 утра и не сильно важно от лица сообщества или страницы.
import vk_api
import database
import config
import requests
import random
from datetime import datetime
from time import sleep
TOKEN = config.TOKEN
login = config.login
password = config.password
vk_session = vk_api.VkApi(login, password)
vk_session.auth()
vk = vk_session.get_api()
working = True
posts = database.get_from_db()
def post_vk(post):
now = datetime.now()
current_time = now.strftime("%H:%M")
time_to_send = "21:00"
print(current_time)
if current_time==time_to_send:
print(vk.wall.post(message='Новый день'))
sleep(5)
print(vk.wall.post(message = post))
sleep(55)
while working:
rand = random.randrange(0,len(posts))
print(posts[rand])
post_vk(posts[rand])
В принципе цель достигнута осталось оттестировать на длительном промежутке времени не будет ли приложение падать, клиент в потенциальном будущем. Всё пишется за пол часа и возможными средствами и мы вовсе не профессионалы посему нам простительно, да и приложение в принципе никому и не нужно вовсе. Ну и целью было склепать годноту за пол часа времени как и положено.

И ни в коем случае, не верьте всем тем кто говорит что программирование это просто.
Весь код находится в репозитории по ссылке с ключами доступа и прочим. Но в принципе это не сильно важно.