Форум программистов, компьютерный форум, киберфорум
Python: Web
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.74/76: Рейтинг темы: голосов - 76, средняя оценка - 4.74
 Аватар для IRIP
514 / 146 / 28
Регистрация: 18.04.2015
Сообщений: 1,904
Записей в блоге: 16

Анализ информации из социальных сетей

21.07.2018, 11:33. Показов 17962. Ответов 187
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
нужно собирать и анализировать информацию из социальных сетей

на python делать?
с чего нужно начинать?
1
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.07.2018, 11:33
Ответы с готовыми решениями:

Как сделать телеграм бота пересылающий посты и новости из RSS лент и социальных сетей (агрегатор)
Я пытался как всегда разбить план на мелкие составляющие, я начал думать что конкретно и как бот должен будет уметь делать, но даже во...

Блокировка социальных сетей
Возможно подобная тема уже есть, но как-то не нашел.... И всё же дело вот в чем, блокировать соцсети это понятно как, антивирус там,...

Кнопки социальных сетей
Скачал бесплатный шаблон в Вордпресс,в демо версии установлены кнопки социальных сетей в шапке сайта(фото№1).В админпанели есть социальные...

187
 Аватар для IRIP
514 / 146 / 28
Регистрация: 18.04.2015
Сообщений: 1,904
Записей в блоге: 16
10.09.2018, 22:54  [ТС]
Студворк — интернет-сервис помощи студентам
ТабуретY, https://docs.google.com/docume... sp=sharing

Добавлено через 4 минуты
это если без учета, что настройки можно хранить в базе данных

Добавлено через 1 час 46 минут
таким образом, структура проекта по ссылке может быть следующей:

PROJECT

- SOURCE

-- IMPORT

--- vk_groups.py

--- vk_api.py

-- EXPORT
--- csv.py

- group_108964054.py

srart.py

settings.py
0
 Аватар для IRIP
514 / 146 / 28
Регистрация: 18.04.2015
Сообщений: 1,904
Записей в блоге: 16
14.09.2018, 18:53  [ТС]
Как-то совсем упустил вопрос автоматизации процесс

есть ведь

SCRAPY, например

Добавлено через 1 час 11 минут
Цитата Сообщение от IRIP Посмотреть сообщение
Выдает ошибку
ModuleNotFoundError: No module named '__main__.core'; '__main__' is not a package

эта ошибка появляется, если ставишь точку, когда

from .conf import settings

если точку убрать, то не появляется ошибка

Добавлено через 1 час 16 минут
ТабуретY, в коде из поста № 14

новая ошибка

1. Вывести посты из группы
2. Просмотреть сохраненные посты
Выберите 1 или 2 1
Название группы Подслушано подсмотрено Евпатория
Traceback (most recent call last):
File "/home/irip/pycharm/pyget/vk_core.py", line 33, in <module>
id = id_by_name(gr)
File "/home/irip/pycharm/pyget/vk_core.py", line 13, in id_by_name
return vk.groups.getById( group_id=name)[0]['id']
File "/home/irip/pycharm/pyget/venv/lib/python3.6/site-packages/vk_api/vk_api.py", line 646, in __call__
return self._vk.method(self._method, kwargs)
File "/home/irip/pycharm/pyget/venv/lib/python3.6/site-packages/vk_api/vk_api.py", line 615, in method
raise error
vk_api.exceptions.ApiError: [100] One of the parameters specified was missing or invalid: group_ids is undefined

Добавлено через 11 минут
Python
1
2
3
4
5
6
7
8
9
10
11
#Поиск ссылки на оригинал изображения
def urlTOP(messAr,url=""): #urlToOriginalPhoto
    if   "photo_2560" in messAr: url = "photo_2560"
    elif "photo_1280" in messAr: url = "photo_1280"
    elif "photo_807"  in messAr: url = "photo_807"
    elif "photo_604"  in messAr: url = "photo_604"
    elif "photo_130"  in messAr: url = "photo_130"
    elif "photo_75"   in messAr: url = "photo_75"
    else: print('error of sizeing')
    url = messAr[url]
    return url
Добавлено через 35 секунд
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
#Подключаем необходимые модули
import os
import vk
import urllib
import time
import requests
#--------- END ---------#
#Создание папки для фотографии
def mkDirForPh(dirName, co = 0, iF = 1):
    while iF:
        if (dirName in os.listdir()): #если такая папка есть, пробуем добавить - (1) если и такая есть добавляем - (2) и т.д.
            co = co + 1
            dirName = str(withUID) + "(" + str(co) + ")"
        else:# если папки с названием dirName в этой директории нет, создаем ее и переходим в нее
            os.mkdir(dirName) 
            os.chdir(dirName)
            iF = 0
#--------- END ---------#
            
#Поиск ссылки на оригинал изображения
def urlTOP(messAr,url=""): #urlToOriginalPhoto
    if   "photo_2560" in messAr: url = "photo_2560"
    elif "photo_1280" in messAr: url = "photo_1280"
    elif "photo_807"  in messAr: url = "photo_807"
    elif "photo_604"  in messAr: url = "photo_604"
    elif "photo_130"  in messAr: url = "photo_130"
    elif "photo_75"   in messAr: url = "photo_75"
    else: print('error of sizeing')
    url = messAr[url]
    return url
#--------- END ---------#
#Скачивание изображения
def DownloadFile(url):
    local_filename = url.split('/')[-1]
    r = requests.get(url)
    f = open(local_filename, 'wb')
    for chunk in r.iter_content(chunk_size=512 * 1024): 
        if chunk: # filter out keep-alive new chunks
            f.write(chunk)
    f.close()
    return
#--------- END ---------#
#Диалог
def IDC(F = 1): #input dialog check  
    while F:
        if 'token' in globals():#если переменная токена определена
            F = 0
            print('token - Y')
        else:
            temp = input('Введите ваш токен: ')
            if len(temp) > 10 and str(type(temp)) == "<class 'str'>":
                global token
                token = temp
                continue
            else:
                print('Токен введен не правильно!')
                F = 1
                continue
        if 'withUID' in globals():#если переменная withUID определена
            F = 0
            print('ID - Y')
        else:
            temp = input('Введите ID человека, из диалога с которым, вы хотите скачать все фото(пример:947530459) без пробелов и букв ID!: ')
            if len(temp) > 0 and str(type(temp)) == "<class 'str'>":
                global withUID
                withUID = temp
                continue
            else:
                print('ID введен не правильно!' + str(type(temp)))
                F = 1
                continue
#--------- END ---------#
            
IDC()           
#подключаемся к vkAPI
vkAPI = vk.API(access_token=token)
#Достаем сообщения
lm = vkAPI.messages.getHistory(count = 200, user_id=withUID)
# Получаем Имя и Фамилию собеседника
withUsr = vkAPI.users.get(users_ids=withUID)
#Количество сообщений с собеседником
print ("Всего сообщений: "+str(lm['count']))
# Инициализация счетчиков
MPC = 0 #MessParseCounter счетчик для масива lm
SPC = 0 #SavedPhotosCounter счетчик сохраненных сообщений
#создаем папку с именем withUID
mkDirForPh(str(withUID))
#парсим массив сообщений
for i in range(lm['count']): # co - кол-во итераций, lm['count'] - кол-во сообщений всего
    if(MPC > 199):#По скольку сообщения мы вытягиваем по 200 шт, проверяем, какое по счету сообщение мы будем парсить, если MPC > 199 : MPC = 0 и получаем новые 200 сообщений
        lm = vkAPI.messages.getHistory(count = 200, user_id=withUID, offset=i)
        MPC = 0
        time.sleep(0.5)#делаем небольшую паузу
    if 'attachments' in lm['items'][MPC]:  #если в сообщении есть прикрепление
        for j in range(len(lm['items'][MPC]['attachments'])): #парсим прикрепления на предмет фотографий
            if 'photo' in lm['items'][MPC]['attachments'][j]: #если приложение являеться фотографией
                #сохраняем фотографию
                url = urlTOP(lm['items'][MPC]['attachments'][j]['photo'])# получаем URL на картинку
                print("i = " + str(i) + "| j = " + str(j) + "| MPC = " + str(MPC) + "| SPC = \r" + str(SPC)) # дебаг
                DownloadFile(url)#скачиваем файл
                #print (url)
                SPC+=1#инкрементируем счетчик сохраненных фотографий
    #конец for
    MPC+=1 #Инкрементируем счетчик обработанных сообщений
print('Сообщений сканировано:'+ str(i+1) +'\nЗагружено всего фотографий:' + str(SPC))
print('Все скачанные фотографии будут лежать в папке:'+ os.getcwd())
0
1741 / 913 / 480
Регистрация: 05.12.2013
Сообщений: 3,074
14.09.2018, 19:13
Тут не понятно когда вызывается функция id_by_name, там ошибка
0
 Аватар для IRIP
514 / 146 / 28
Регистрация: 18.04.2015
Сообщений: 1,904
Записей в блоге: 16
15.09.2018, 00:03  [ТС]
ТабуретY, в принципе, уже получается что-то =)

сейчас думаю как прикрутить обработчик - чтобы он сам сортировал
на основании нейросети

http://mechanoid.kiev.ua/ml-text-proc.html

https://pythono.ru/neuro/

Добавлено через 1 час 21 минуту
Поехали...

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
print('Привет! Давай поработаем!')
print('1. Импорт источников')
print('2. Экспорт источников')
choise = int(input('выбери свой вариант: '))
 
while True:
    if choise <= 0:
        print('Ошибка ввода')  # нулевой случайы
        break
    elif choise == 1:
        print('Выбран 1')
        break
    elif choise == 2:
        print('Выбран 2')
        break
    else:
        print('Неправильный ввод')
        break
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
15.09.2018, 07:03
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
Привет! Давай поработаем!
1. Импорт источников
2. Экспорт источников
выбери свой вариант: o
Traceback (most recent call last):
  File "1.py", line 7, in <module>
    choise = int(input('выбери свой вариант: '))
ValueError: invalid literal for int() with base 10: 'o'
 
 
------------------
(program exited with code: 1)
Press return to continue
Глять лучше библиотеку argparse
1
 Аватар для IRIP
514 / 146 / 28
Регистрация: 18.04.2015
Сообщений: 1,904
Записей в блоге: 16
15.09.2018, 14:35  [ТС]
Продолжаем:


Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
print('Привет! Давай поработаем!')
print('1. Импорт источников')
print('2. Экспорт источников')
choise = int(input('Выбери свой вариант: '))
 
while True:
    if choise <= 0:
        print('Ошибка ввода')  # нулевой случай
        break
    elif choise == 1:
        print('Выбран вариант № 1')
        id = input('Введите id источника (папка import): ')
        name = input('Введите желаемое название: ')
        frequency = int(input('Как часто вызывать (цифра, в мин): '))
        exp = int(input('Укажите id файла экспорта'))
        # создать класс GET POST
        print('Пробуем сделать запрос...')
        posts = get_posts(id)
        data = []
        for post in posts:
            data.append(post)
            print('Получилось!', post['id'], post['text'][:10] + '...')
 
        s = input('Вы хотите сохранить введенные данные? Да(y)/Нет(n): ')
        if s == 'да' or s == '1' or s == 'Да' or s == 'y' or s == 'Y':
            # сохраняем введенные выше данные группы в базу
            serialize_data(data)
        elif s == 'нет' or s == '0' or s == 'Нет' or s == 'n' or s == 'N':
            data = deserialize_data()
            print(*data)
        break
 
    elif choise == 2:
        print('Выбран вариант № 2')
        break
    else:
        print('Ошибка ввода.')
        break

Сейчас нужна функция, которая тут

Python
1
2
3
4
5
6
7
8
        s = input('Вы хотите сохранить введенные данные? Да(y)/Нет(n): ')
 
        if s == 'да' or s == '1' or s == 'Да' or s == 'y' or s == 'Y':
            # сохраняем введенные выше данные группы в базу
            serialize_data(data)
        elif s == 'нет' or s == '0' or s == 'Нет' or s == 'n' or s == 'N':
            data = deserialize_data()
            print(*data)

которая будет сохранять весь запрос в sqlite
в формате:

- id - id файла из папки import. В этом файле должно содержаться id группы/сайта/обработчики и прочие параметры
- name - название в базе данных
- frequency - периодичность использования (период вызова в базе)
- exp id файла экспорта



вот уже, хоть как-то выглядит =)

продолжаем...



Рыжий Лис, сложно разобраться в этой библиотеке
0
Эксперт Python
5439 / 3860 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
15.09.2018, 15:05
Цитата Сообщение от IRIP Посмотреть сообщение
если точку убрать, то не появляется ошибка
Точка это относительный import - он используется внутри пакетов для импорта своих субмодулей. При этом сам модуль с таким импортом нельзя запускать напрямую.

Если мы хотим запускать пакет в консоли,
Code
1
python -m пакет
то пакет должен иметь файл __main__.py, который будет выступать в роли главного файла пакета и в нем должна быть точка входа
Python
1
2
if __name__ == "__main__":
    main()
которая будет выполнена при запуске пакета.
Без файла __main__.py можно вызывать модуль только по полному пути:
Code
1
python -m пакет.модуль
будет выполнена точка входа в этом модуле, если она есть.


Цитата Сообщение от IRIP Посмотреть сообщение
if s == 'да' or s == '1' or s == 'Да' or s == 'y' or s == 'Y':
Python
1
s.lower() in ("да","1","y")
1
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
15.09.2018, 15:22
Создал бы новую тему…

Ничего сложного:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import argparse
 
 
def run_import(args):
    print(args)
 
 
if __name__ == '__main__':
    parser = argparse.ArgumentParser(description='Мой мегаскрипт.')
    subparsers = parser.add_subparsers(help='Команда')
    parser_import = subparsers.add_parser('import', help='Импорт')
    parser_import.add_argument('source_id', type=int, help='id источника')
    parser_import.add_argument('name', type=str)
    parser_import.add_argument('frequency', type=int)
    parser_import.add_argument('exp', type=int)
    parser_import.add_argument('--save', action='store_true')
    parser_import.set_defaults(func=run_import)
   
    parser_export = subparsers.add_parser('export', help='Экспорт')
    # …
    
    args = parser.parse_args()
    args.func(args)
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
$ python3 1.py -h
usage: 1.py [-h] {import,export} ...
 
Мой мегаскрипт.
 
positional arguments:
  {import,export}  Команда
    import         Импорт
    export         Экспорт
 
optional arguments:
  -h, --help       show this help message and exit
 
$ python3 1.py import
usage: 1.py import [-h] [--save] source_id name frequency exp
1.py import: error: the following arguments are required: source_id, name, frequency, exp
 
$ python3 1.py import -h
usage: 1.py import [-h] [--save] source_id name frequency exp
 
positional arguments:
  source_id   id источника
  name
  frequency
  exp
 
optional arguments:
  -h, --help  show this help message and exit
  --save
 
$ python3 1.py import 1 2 3 4 
Namespace(exp=4, frequency=3, func=<function run_import at 0x7fb0452c6510>, name='2', save=False, source_id=1)
 
$ python3 1.py import 1 2 3 4 --save
Namespace(exp=4, frequency=3, func=<function run_import at 0x7fd3faeb2510>, name='2', save=True, source_id=1)
0
 Аватар для IRIP
514 / 146 / 28
Регистрация: 18.04.2015
Сообщений: 1,904
Записей в блоге: 16
15.09.2018, 16:40  [ТС]
Garry Galler, Рыжий Лис, ТабуретY, спасибо за помощь!


Вот, что получается:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
print('Привет! Давай поработаем!')
print('1. Импорт источников')
print('2. Экспорт источников')
print('3. Вывести список импортов')
 
while True:
    choise = input('Выбери цифру нужного варианта: ')
 
    if int(choise) <= 0:
        # нулевой случай
        print('Введено отрицательное число или == 0.')
        print('Работа программы прекращена')
        break
 
    elif int(choise) == 1:
        print('Выбран вариант № 1')
        id = input('Введите id источника (папка import): ')
        name = input('Введите желаемое название: ')
        frequency = int(input('Как часто вызывать (цифра, в мин): '))
        exp = int(input('Укажите id файла экспорта: '))
        # создать класс GET POST
        print('Пробуем сделать запрос...')
        posts = get_posts(id)
        data = []
        for post in posts:
            data.append(post)
            print('Получилось!', post['id'], post['text'][:10] + '...')
 
        s = input('Вы хотите сохранить введенные данные? Да(y)/Нет(n): ')
        if s.lower() in ("да", "1", "y"):
            # сохраняем введенные выше данные группы в базу
            serialize_data(data)
        elif s.lower() in ("нет","0","n"):
            data = deserialize_data()
            print(*data)
        continue
 
    elif int(choise) == 2:
        print('Выбран вариант № 2')
        continue
    elif int(choise) == 3:
        print('Выбран вариант № 3')
        print('Выводим список всех источников с назначением: ')
        continue
    else:
        print('Выбран неверный вариант! Повторите ввод или 0 для выхода')
        continue
Теперь нужно добавить сохранение в базу вводимых данных. Выбрал sqlite так как она платформонезависима и работает там, где есть python3


код

Python
1
2
3
4
5
6
7
8
        # сохраняем данные добавляемого варианта в файл или базу...
        save = input('Вы хотите сохранить введенные данные? Да(y)/Нет(n): ')
        set = [id, name, frequency, exp]
        if s.lower() in ("да", "1", "y"):
            serialize_data(set)
        elif s.lower() in ("нет","0","n"):
            print('Начинаем сначала!')
            continue
отвечает за сохранение результатов

serialize_data - нужно вынести в отдельный файл. В нем я смогу настраивать независимый обработчик (или подключать новые)

но, что писать в этот файл.
Ведь нужно предварительно создать базу данных, подключиться к ней? Может прямо в этом файле сделать?
или отдельной инструкцией?

Добавлено через 50 минут
так как редактировать сообщение не могу

print(*set) нужно засунуть в базу данных (текст, sqlite) не важно

Python
1
2
3
4
5
6
7
8
9
        # сохраняем данные добавляемого варианта в файл или базу...
        save = input('Вы хотите сохранить введенные данные? Да(y)/Нет(n): \n')
        set = [id, name, frequency, exp]
        if save.lower() in ("да", "1", "y"):
            #serialize_data(set)
            print(*set)
        elif save.lower() in ("нет","0","n"):
            print('Начинаем сначала!')
            continue
0
 Аватар для IRIP
514 / 146 / 28
Регистрация: 18.04.2015
Сообщений: 1,904
Записей в блоге: 16
16.09.2018, 13:48  [ТС]
Вот тут разбираем вопрос работы с базой данных

Sqlite создание базы, управление из python3

Добавлено через 1 час 17 минут
Продолжаем.

Согласно намеченного плана и прошлой переписки, у нас есть код, чтобы выдрать сообщения из группы.

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
import vk_api
import pickle
 
vk_session = vk_api.VkApi(login, password)
vk_session.auth()
vk = vk_session.get_api()
tools = vk_api.VkTools(vk_session)
 
data_file =  'data.pickle'
 
def id_by_name(name):
    return vk.groups.getById( group_id=name)[0]['id']
    
def serialize_data(data):
    with open(data_file, 'wb') as f:
            pickle.dump(data, f)
        
def deserialize_data():
    with open(data_file, 'rb') as f:
        data = pickle.load(f)
    return data
 
def get_posts(id):
    return tools.get_all_iter('wall.get', 100, {'owner_id': -id})
 
if __name__ ==  '__main__':
    print('1. Вывести посты из группы')
    print('2. Просмотреть сохраненные посты')
    n = input('Выберите 1 или 2 ')
    if n  == '1':
        gr = input('Название группы ')
        id = id_by_name(gr)
        posts = get_posts(id)
        data = []
        for post in posts:
            data.append(post)
            print(post['id'], post['text'][:30] + '...')
        s = input('Вы хотите сохранить данные? да/нет ')
        if s == 'да':
            serialize_data(data)
    elif n == '2':
        data = deserialize_data()
        print(*data)

Теперь этот код нужно будет скопировать в папку import и назвать id_group или другим именем

цель - в этом файле будут лежать все настройки касательно подключения и импорта данных (планируется)

но, закралось сомнение.

Можно сделать более универсально? Например, сделать 1 файл а id группы и другие параметры подтягивать из базы?
как будет правильнее?

ведь речь идет, возможно, при ОДНОВРЕМЕННОМ обращении к sqlite, возможно в 3-5, 10 потоков

Добавлено через 1 час 4 минуты
* * *


Как получить токен VK

Авторизуемся на сайте вконтакте

Идем на vkhost.github.io – нажимаем на Snapster для iPhone (например)

Из адресной строки берем токен (выделен жирным): https://api.vk.com/blank.html#... ser_id=777

В переменную vk_key вписываем полученный токен. Кавычки не забываем оставить.

В переменную group_id вставляем цифровой id своего сообщества.
0
Эксперт Python
5439 / 3860 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
16.09.2018, 15:16
Цитата Сообщение от IRIP Посмотреть сообщение
ОДНОВРЕМЕННОМ обращении к sqlite, возможно в 3-5, 10 потоков
Sqlite поддерживает одновременный доступ из разных потоков к одному соединения только в режиме serialized (флаг SQLITE_OPEN_FULLMUTEX).
Но сами запросы на запись будут блокироваться и выполняться синхронно.
Однако дока питоновской sqlite3 прямым текстом говорит:
Предыдущие версии SQLite имели проблемы с совместным подключением потоков. Вот почему модуль Python запрещает совместное использование соединений и курсоров между потоками. Если вы все еще пытаетесь это сделать, вы получите исключение во время выполнения
То есть - обломайтесь, пацаны.

Добавлено через 17 минут
Update. Хотя...
By default, check_same_thread is True and only the creating thread may use the connection. If set False, the returned connection may be shared across multiple threads. When using multiple threads with the same connection writing operations should be serialized by the user to avoid data corruption.
Интересно, а кто-нибудь со sqlite3 из python работал в многопоточном варианте? Я изначально считал, что с ней это это бесполезно (по крайней мере, при обычном коннекте получал ошибки доступа, если запускал другой скрипт, который писал в другую таблицу этой же базы) и даже не пробовал...
На чтение то понятно - можно.
0
 Аватар для IRIP
514 / 146 / 28
Регистрация: 18.04.2015
Сообщений: 1,904
Записей в блоге: 16
16.09.2018, 16:03  [ТС]
Цитата Сообщение от Garry Galler Посмотреть сообщение
Интересно, а кто-нибудь со sqlite3 из python работал в многопоточном варианте?
читал, это возможно, если сама база хранится в памяти ... что это значит, пока не понял, видимо требуется создание виртуального диска в оперативной памяти... и дампа на hdd раз в несколько секунд, как это можно в postgresql настроить
0
Эксперт Python
5439 / 3860 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
16.09.2018, 16:23
Цитата Сообщение от IRIP Посмотреть сообщение
если сама база хранится в памяти
В памяти это когда не будет никакого файла на диске. Создается просто указанием
Python
1
conn =  sqlite3.connect(":memory:")
Но это значит, что никакие данные нигде не сохраняются после отключения от БД.
1
 Аватар для IRIP
514 / 146 / 28
Регистрация: 18.04.2015
Сообщений: 1,904
Записей в блоге: 16
16.09.2018, 22:04  [ТС]
* * *


Вопрос. Есть код, с первой страницы.

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
from base import sqlite
import vk_api
 
def main():
    login, password = settings.login, settings.password
    vk_session = vk_api.VkApi(login, password)
 
    try:
        vk_session.auth(token_only=True)
    except vk_api.AuthError as error_msg:
        print(error_msg)
        return
 
    tools = vk_api.VkTools(vk_session)
 
    wall = tools.get_all('wall.get', 100, {'owner_id': -108964054})
 
    print('Posts count:', wall['count'])
 
    for i in range(wall['count']):
        print('Post:', wall['items'][i])
 
 
if __name__ == '__main__':
    main()
добавляю его в папку /import и хочу встроить возможность, которая позволит 'owner_id': -108964054 брать из базы sqlite3
Правильно?

Добавлено через 21 минуту
Garry Galler, имеет ли, смысл, обрабатывать запрос делая в памяти "временную базу"
а потом дамп

а потом сливать его в на жесткий диск?

Добавлено через 3 часа 54 минуты
* * *

Ребята, помогите пожалуйста, кто чем может
мне бы только направление.

Видите, сначала что делать, я более менее разобрался. Нужно немного помочь, чтобы продолжить и понять, как в базу результаты писать
0
1741 / 913 / 480
Регистрация: 05.12.2013
Сообщений: 3,074
16.09.2018, 22:39
Так можно прямо из документации взять https://docs.python.org/2/library/sqlite3.html

Вот, создание базы и запись данных

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
import sqlite3
 
conn = sqlite3.connect('example.db')
 
c = conn.cursor()
 
c.execute('''CREATE TABLE stocks
             (date text, trans text, symbol text, qty real, price real)''')
 
c.execute("INSERT INTO stocks VALUES ('2006-01-05','BUY','RHAT',100,35.14)")
 
conn.commit()
 
conn.close()
0
 Аватар для IRIP
514 / 146 / 28
Регистрация: 18.04.2015
Сообщений: 1,904
Записей в блоге: 16
16.09.2018, 23:45  [ТС]
ТабуретY, да, спасибо.

Я пока завел три файла: index.py, sqlite.py, vk_import.py


index.py

Кликните здесь для просмотра всего текста

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
from base import sqlite
import sqlite3
 
print('Привет! Давай поработаем!')
print('1. Импорт источников')
print('2. Экспорт источников')
print('3. Вывести список импортов')
 
while True:
    choise = input('\n Выбери цифру нужного варианта: ')
 
    if int(choise) <= 0:
        # нулевой случай
        print('Введено отрицательное число или == 0.')
        print('Работа программы прекращена')
        break
 
    elif int(choise) == 1:
        print('Выбран вариант № 1')
        id = input('Введите id источника (папка import): \n')
        name = input('Введите желаемое название: \n')
        frequency = int(input('Как часто вызывать (цифра, в мин): \n'))
        exp = int(input('Укажите id файла экспорта: \n'))
 
        # создать класс GET POST
        print('Пробуем сделать запрос...')
        # posts = None  # get_posts(id)
        # data = []
        # for post in posts:
        #     data.append(post)
        #     print('Получилось!', post['id'], post['text'][:10] + '...')
 
        # сохраняем данные добавляемого варианта в файл или базу...
        save = input('Вы хотите сохранить введенные данные? Да(y)/Нет(n): \n')
        data = [id, name, frequency, exp]
        if save.lower() in ("да", "1", "y"):
            if not sqlite.exists('dbCore.temp'):
                bd = input('Первый запуск программы. '
                           'Вы хотите создать базу данных? '
                           'Да(y)/Нет(n): \n')
                if bd.lower() in ("да", "1", "y"):
                    sqlite.save_to_bd(data)
            else:
                sqlite.save_to_bd(data)
 
        elif save.lower() in ("нет", "0", "n"):
            print('Начинаем сначала!')
 
    elif int(choise) == 2:
        print('Выбран вариант № 2')
        continue
    elif int(choise) == 3:
        print('Выбран вариант № 3')
        print('Выводим список всех источников с назначением: ')
        continue
    else:
        print('Выбран неверный вариант! Повторите ввод или 0 для выхода')
        continue



base/sqlite.py

Кликните здесь для просмотра всего текста

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
import os
import sqlite3
 
def exists(path):
    try:
        os.stat(path)
    except OSError:
        return False
    return True
 
 
def save_to_bd(data):
    # serialize_data(set)
    print(*data)



inport/vk_import.py

Кликните здесь для просмотра всего текста

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# import vk
from conf import settings
from base import sqlite
import vk_api
 
session = vk.Session()
api = vk.API(session)
 
r = api.wall.get(owner_id=-29534144, count = 7)  # тут нужно брать id группы или пользователя из базы
title = []
excerpt = []
date_post = []
source_url = []
source_author = []
picture = []
music = []
video = []
filename = []
for i in range(1,8):
    info = r[i]
    name.append(info['text'])
    picture.append(info['attachments'][0]['photo']['src_small'] if 'photo' in info[
        'attachments'][0] else 'no picture')
    music.append(info['attachments'][1]['audio']['url'])
for post in r:
    if 'video' in post['attachment']:
        access_key = post['attachment']['video']['access_key']
        owner = post['attachment']['video']['owner_id']
        vid = post['attachment']['video']['vid']
 
        template = 'https://vk.com/{}'
        print(template.format(api.video.get(
            videos='{}_{}_{}'.format(owner, vid, access_key, extended=1))[1]['link']))
    else:
        print('Видео не найдено.')
print(name)
print(picture)
print(music)
print(video)
 
 
#
# def main():
#     login, password = settings.login, settings.password
#     vk_session = vk_api.VkApi(login, password)
#
#     try:
#         vk_session.auth(token_only=True)
#     except vk_api.AuthError as error_msg:
#         print(error_msg)
#         return
#
#     tools = vk_api.VkTools(vk_session)
#
#     wall = tools.get_all('wall.get', 100, {'owner_id': -108964054})
#
#     print('Posts count:', wall['count'])
#
#     for i in range(wall['count']):
#         print('Post:', wall['items'][i])
#
#
# if __name__ == '__main__':
#     main()
#



все они лежат в

Добавлено через 5 минут
теперь хочу понять, как это все скрестить =)

Цель такая:

- создать источник - файл, например "vk_import" который будет из базы брать id и смотреть (забирать) сообщения источника. Источников может быть множество, как и файлов обработчиков (для других сайтов)

- Файлом index.py, точнее мастером, я определяю, что нужно сделать (первая процедура "добавить источник") и пока рассматриваем вариант с vk_import, как самым простым и доступным на данный момент


В общем, нужно мастером добавить в базу информацию
а потом с помощью файла vk_import выдернуть посты группы и сохранить их в базе
0
1741 / 913 / 480
Регистрация: 05.12.2013
Сообщений: 3,074
17.09.2018, 00:00
Ну так вроде все есть, подправить только sqlite.py и завернуть остальное в классы
0
 Аватар для IRIP
514 / 146 / 28
Регистрация: 18.04.2015
Сообщений: 1,904
Записей в блоге: 16
17.09.2018, 00:40  [ТС]
ТабуретY, в этом и проблема

я, технически, не могу понять как это реализовать
0
1741 / 913 / 480
Регистрация: 05.12.2013
Сообщений: 3,074
17.09.2018, 02:00
Вот простой пример, парсим группу заданную по id и сохраняем id поста, время поста и текст

index.py

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
from vk_import import VkParser
from bd import DataBase
import os
 
to_dos = 0
name_db = 'data.bd'
 
print('Привет! Давай поработаем!')
print('1. Импорт источников')
 
def exists(path):
    try:
        os.stat(path)
    except OSError:
        return False
    return True
 
 
while True:
    choise = input('\n Выбери цифру нужного варианта: ')
 
    if int(choise) <= 0:
        # нулевой случай
        print('Введено отрицательное число или == 0.')
        print('Работа программы прекращена')
        break
 
    elif int(choise) == 1:
        print('Выбран вариант № 1')
        id = input('Введите id источника (папка import): \n')
 
        posts = []
 
        try:
            vk = VkParser()
            posts = vk.get_info(int(id))
        except:
            pass
        
        if not posts:
            print("Такой группы нет")
        else:
            print('Количество постов:', len(posts))
            save = input('Вы хотите сохранить введенные данные? Да(y)/Нет(n): \n')
            if save.lower() in ("да", "1", "y"):
                if not exists(name_db):
                    bd = input('Первый запуск программы. '
                               'Вы хотите создать базу данных? '
                               'Да(y)/Нет(n): \n')
                    if bd.lower() in ("да", "1", "y"):
                        to_dos = 1
                    else:
                        to_dos = 2
                else:
                    to_dos = 1  
            elif save.lower() in ("нет", "0", "n"):
                to_dos = 2
 
            if to_dos == 1:
                bd = DataBase(name_db)
                data = [(posts[i]['id'], posts[i]['date'], posts[i]['text']) for i in range(len(posts))]
                bd.save(data)
            elif to_dos == 2:
                print('Начинаем сначала!')
vk_import.py

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import vk_api
import settings 
 
class VkParser:
    def __init__(self):
        login, password = settings.login, settings.password
        self.vk_session = vk_api.VkApi(login, password)
     
        try:
            self.vk_session.auth(token_only=True)
        except vk_api.AuthError as error_msg:
            print(error_msg)
 
    def get_info(self, id):
        tools = vk_api.VkTools(self.vk_session)
        wall = tools.get_all('wall.get', 100, {'owner_id': -id})
        return wall['items']
bd.py

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import sqlite3
 
 
class DataBase:
    def __init__(self, name):
        self.conn = sqlite3.connect(name)
        self.c = self.conn.cursor()
        try:
            self.c.execute('''CREATE TABLE vkdata ( id integer, data integer, txt text)''')
        except:
            print("Не удалось создать таблицу")
 
    def save(self, data):
        self.c.executemany("INSERT INTO vkdata VALUES (?,?,?)", data)
        self.conn.commit()
        self.conn.close()
Результат на картинке
Миниатюры
Анализ информации из социальных сетей  
1
 Аватар для IRIP
514 / 146 / 28
Регистрация: 18.04.2015
Сообщений: 1,904
Записей в блоге: 16
20.09.2018, 12:13  [ТС]
ТабуретY, возникает ошибка

ModuleNotFoundError: No module named 'vk_import'
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.09.2018, 12:13

Виджеты социальных сетей
Доброе время, суток! Прошу помощи в следующем вопросе. Захотелось мне изменить виджеты своих групп в социальных сетях, а именно...

Кнопки социальных сетей
Здравствуйте! Подскажите пожалуйста, где можно почитать о том как создать динамические кнопки социальных сетей, в стиле картинки...

Иконки социальных сетей
Подскажите, как поменять иконки социальных сетей в компоненте авторизации битрикса? я нашел файл где прописывает bg-image, для каждой...

Шаринг социальных сетей
Здравствуйте. Помогите пожалуйста с шарингом соц сетей (ВК, FaceBook, Twitter). Киньте ссылки на примеры, или на самые алгоритмы...

Плагин социальных сетей
Всем привет! Расписывать не стану, вообщем скажите, есть что то подобное? Знаю что есть vk api но это не то.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Новые блоги и статьи
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru