mirror of
https://gitea.phreedom.club/localhost_frssoft/FMN_bot
synced 2024-11-22 18:39:20 +02:00
Changes:
* Parse imdb\kinopoisk limited * Кинопоиск всегда пытается резолвится через imdb базу * Improve append message
This commit is contained in:
parent
012841dda2
commit
f46235ae22
|
@ -86,7 +86,18 @@ def convert_datasets_to_db():
|
||||||
def get_title_by_id(films_ids=list):
|
def get_title_by_id(films_ids=list):
|
||||||
tt_list = []
|
tt_list = []
|
||||||
for i in films_ids:
|
for i in films_ids:
|
||||||
tt_film = c.execute(f"SELECT * FROM titles WHERE tt_id={i}").fetchone()
|
tt_film = c.execute("SELECT * FROM titles WHERE tt_id = (?)", (i,)).fetchone()
|
||||||
tt_list.append(tt_film)
|
tt_list.append(tt_film)
|
||||||
return tt_list
|
return tt_list
|
||||||
|
|
||||||
|
|
||||||
|
def get_title_by_names_and_year(film_names=list):
|
||||||
|
tt_list = []
|
||||||
|
for i in film_names:
|
||||||
|
tt_film = c.execute('''SELECT * FROM titles
|
||||||
|
WHERE (original_name = (?) OR ru_name = (?))
|
||||||
|
AND year = (?)''', i).fetchone()
|
||||||
|
if tt_film:
|
||||||
|
tt_list.append(tt_film)
|
||||||
|
if tt_list != []:
|
||||||
|
return tt_list
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
from src.imdb_datasets_worker import get_title_by_names_and_year
|
||||||
import requests
|
import requests
|
||||||
import time
|
import time
|
||||||
|
|
||||||
|
@ -9,7 +10,7 @@ with open(".auth_kinopoisk", mode='rt') as key_file:
|
||||||
token = key_file.read().replace('\n', '')
|
token = key_file.read().replace('\n', '')
|
||||||
|
|
||||||
|
|
||||||
def get_kinopoisk_movie(film=list):
|
def get_kinopoisk_movie_to_imdb(film=list):
|
||||||
films_resolved = []
|
films_resolved = []
|
||||||
for i in film:
|
for i in film:
|
||||||
headers = {
|
headers = {
|
||||||
|
@ -18,11 +19,13 @@ def get_kinopoisk_movie(film=list):
|
||||||
r = requests.get(kinopoisk_api_url + "/films/" + i, headers=headers)
|
r = requests.get(kinopoisk_api_url + "/films/" + i, headers=headers)
|
||||||
if r.status_code == 200:
|
if r.status_code == 200:
|
||||||
film_data = r.json()
|
film_data = r.json()
|
||||||
films_resolved.append((film_data['type'], film_data['year'], film_data['nameOriginal'], film_data['nameRu']))
|
|
||||||
elif r.status_code in (400, 404):
|
films_resolved.append((film_data['nameOriginal'], film_data['nameRu'], film_data['year']))
|
||||||
films_resolved.append(("404",))
|
|
||||||
else:
|
else:
|
||||||
continue
|
continue
|
||||||
time.sleep(0.2)
|
time.sleep(0.2)
|
||||||
return films_resolved
|
|
||||||
|
parsed_imdb_titles = get_title_by_names_and_year(films_resolved)
|
||||||
|
if parsed_imdb_titles != []:
|
||||||
|
return parsed_imdb_titles
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
from config import hour_poll_posting, bot_acct, instance, limit_all_movies_poll, max_fail_limit
|
from config import hour_poll_posting, bot_acct, instance, limit_all_movies_poll, limit_movies_per_user, max_fail_limit
|
||||||
from src.fedi_api import get_status_context, get_status, post_status, mute_user
|
from src.fedi_api import get_status_context, get_status, post_status, mute_user
|
||||||
from src.kinopoisk_api import get_kinopoisk_movie
|
from src.kinopoisk_api import get_kinopoisk_movie_to_imdb
|
||||||
from src.imdb_datasets_worker import get_title_by_id
|
from src.imdb_datasets_worker import get_title_by_id
|
||||||
from src.fmn_database import add_movie_to_poll, get_already_watched, get_suggested_movies_count
|
from src.fmn_database import add_movie_to_poll, get_already_watched, get_suggested_movies_count
|
||||||
from src.fmn_states_db import get_state, add_state
|
from src.fmn_states_db import get_state, add_state
|
||||||
|
@ -21,18 +21,16 @@ def parse_links(text=str):
|
||||||
regex = r"kinopoisk\.ru/"
|
regex = r"kinopoisk\.ru/"
|
||||||
if re.search(regex, text.lower(), flags=re.MULTILINE):
|
if re.search(regex, text.lower(), flags=re.MULTILINE):
|
||||||
kinopoisk_ids = re.findall(r"film/(\d{1,})", text.lower())
|
kinopoisk_ids = re.findall(r"film/(\d{1,})", text.lower())
|
||||||
return kinopoisk_ids
|
if kinopoisk_ids != []:
|
||||||
else:
|
return kinopoisk_ids[:limit_movies_per_user]
|
||||||
return None
|
|
||||||
|
|
||||||
|
|
||||||
def parse_links_imdb(text=str):
|
def parse_links_imdb(text=str):
|
||||||
regex = r"imdb\.com/"
|
regex = r"imdb\.com/"
|
||||||
if re.search(regex, text.lower(), flags=re.MULTILINE):
|
if re.search(regex, text.lower(), flags=re.MULTILINE):
|
||||||
imdb_ids = re.findall(r"tt(\d{1,})", text.lower())
|
imdb_ids = re.findall(r"tt(\d{1,})", text.lower())
|
||||||
return imdb_ids
|
if imdb_ids != []:
|
||||||
else:
|
return imdb_ids[:limit_movies_per_user]
|
||||||
return None
|
|
||||||
|
|
||||||
|
|
||||||
def scan_context_thread():
|
def scan_context_thread():
|
||||||
|
@ -95,26 +93,28 @@ def scan_context_thread():
|
||||||
fail_limit[acct] += 1
|
fail_limit[acct] += 1
|
||||||
continue
|
continue
|
||||||
|
|
||||||
|
index_type = 1
|
||||||
|
index_name = 2
|
||||||
|
index_ru_name = 3
|
||||||
|
index_year = 4
|
||||||
if parsed_result is not None:
|
if parsed_result is not None:
|
||||||
suggested_movies = get_kinopoisk_movie(parsed_result)
|
print(parsed_result)
|
||||||
index_type = 0
|
suggested_movies = get_kinopoisk_movie_to_imdb(parsed_result)
|
||||||
index_name = 2
|
if suggested_movies is None:
|
||||||
index_ru_name = 3
|
post_status('❌ Не удалось выполнить запрос: возможно некорректный тип фильма, попробуйте использовать imdb.com', id_st)
|
||||||
index_year = 1
|
fail_limit[acct] += 1
|
||||||
|
continue
|
||||||
elif parsed_result_imdb is not None:
|
elif parsed_result_imdb is not None:
|
||||||
suggested_movies = get_title_by_id(parsed_result_imdb)
|
suggested_movies = get_title_by_id(parsed_result_imdb)
|
||||||
index_type = 1
|
|
||||||
index_name = 2
|
|
||||||
index_ru_name = 3
|
|
||||||
index_year = 4
|
|
||||||
|
|
||||||
message_writer = []
|
message_writer = []
|
||||||
|
success = False
|
||||||
for movie in suggested_movies:
|
for movie in suggested_movies:
|
||||||
logger.debug(str(movie))
|
logger.debug(str(movie))
|
||||||
if movie[index_type] == "404":
|
if movie[index_type] == "404":
|
||||||
message_writer.append("❌ Не найдено.")
|
message_writer.append("❌ Не найдено.")
|
||||||
fail_limit[acct] += 1
|
fail_limit[acct] += 1
|
||||||
elif movie[index_type] not in ("movie", "FILM", "video"):
|
elif movie[index_type] not in ("movie", "video"):
|
||||||
type_of_title = movie[index_type]
|
type_of_title = movie[index_type]
|
||||||
message_writer.append(f"❌ Не принято:\n- Нам не подходят: сериалы, короткометражные и документальные фильмы")
|
message_writer.append(f"❌ Не принято:\n- Нам не подходят: сериалы, короткометражные и документальные фильмы")
|
||||||
logger.info(f'Предложение {acct} отклонено: не подходящий тип фильма: {type_of_title}')
|
logger.info(f'Предложение {acct} отклонено: не подходящий тип фильма: {type_of_title}')
|
||||||
|
@ -141,26 +141,29 @@ def scan_context_thread():
|
||||||
break
|
break
|
||||||
|
|
||||||
if get_already_watched(name, name_ru, year) == True:
|
if get_already_watched(name, name_ru, year) == True:
|
||||||
message_writer.append(f"ℹ️Этот фильм уже был на FMN: {movie_string}")
|
message_writer.append(f"ℹ️ Этот фильм уже был на FMN: {movie_string}")
|
||||||
logger.info(f'Попытка предложить уже просмотренный фильм: {acct} {name} {name_ru} {year}')
|
logger.info(f'Попытка предложить уже просмотренный фильм: {acct} {name} {name_ru} {year}')
|
||||||
fail_limit[acct] += 1
|
fail_limit[acct] += 1
|
||||||
continue
|
continue
|
||||||
|
|
||||||
add_result = add_movie_to_poll(acct, name, name_ru, year)
|
add_result = add_movie_to_poll(acct, name, name_ru, year)
|
||||||
|
|
||||||
if add_result == 0:
|
if add_result == 0:
|
||||||
message_writer.append(f"✅ Принято: {movie_string}")
|
message_writer.append(f"✅ Принято: {movie_string}")
|
||||||
logger.info(f'Предложение от {acct} принято: {name} {name_ru} {year}')
|
logger.info(f'Предложение от {acct} принято: {name} {name_ru} {year}')
|
||||||
|
success = True
|
||||||
elif add_result == 1:
|
elif add_result == 1:
|
||||||
post_status("❌ Этот фильм уже был предложен", id_st)
|
message_writer.append("❌ Этот фильм уже был предложен")
|
||||||
logger.info(f'Предложение от {acct} было отлонено - фильм в опросе существует')
|
logger.info(f'Предложение от {acct} было отлонено - фильм в опросе существует')
|
||||||
fail_limit[acct] += 1
|
fail_limit[acct] += 1
|
||||||
else:
|
else:
|
||||||
post_status("❌ Вы не можете добавить больше 2х фильмов", id_st)
|
message_writer.append("❌ Вы не можете добавить больше 2х фильмов")
|
||||||
logger.info(f'Предложение от {acct} было отлонено - лимит на пользователя')
|
logger.info(f'Предложение от {acct} было отлонено - лимит на пользователя')
|
||||||
fail_limit[acct] += 1
|
fail_limit[acct] += 1
|
||||||
if message_writer != []:
|
if message_writer != []:
|
||||||
post_status('\n'.join(message_writer) + "\nБлагодарим за ваше предложение!", id_st)
|
message = ''
|
||||||
|
if success:
|
||||||
|
message = "\nБлагодарим за ваше предложение!"
|
||||||
|
post_status('\n'.join(message_writer) + message, id_st)
|
||||||
|
|
||||||
time.sleep(30)
|
time.sleep(30)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue