diff --git a/misskaty/plugins/imdb_search.py b/misskaty/plugins/imdb_search.py
index 4380bc4b..664e2c6e 100644
--- a/misskaty/plugins/imdb_search.py
+++ b/misskaty/plugins/imdb_search.py
@@ -3,6 +3,7 @@ import logging
import re
from bs4 import BeautifulSoup
+from utils import demoji
from deep_translator import GoogleTranslator
from pykeyboard import InlineButton, InlineKeyboard
from pyrogram import filters
@@ -18,7 +19,7 @@ from database.imdb_db import *
from misskaty import BOT_USERNAME, app
from misskaty.core.decorator.errors import capture_err
from misskaty.helper.http import http
-from misskaty.helper.tools import get_random_string, search_jw
+from misskaty.helper.tools import get_random_string, search_jw, GENRES_EMOJI
from misskaty.vars import COMMAND_HANDLER
LOGGER = logging.getLogger(__name__)
@@ -271,46 +272,93 @@ async def imdb_id_callback(_, query):
await query.message.edit_caption("⏳ Permintaan kamu sedang diproses.. ")
url = f"https://www.imdb.com/title/tt{movie}/"
resp = await http.get(
- f"https://yasirapi.eu.org/imdb-page?url={url}",
+ url,
headers={"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/600.1.17 (KHTML, like Gecko) Version/7.1 Safari/537.85.10"},
)
- r_json = resp.json().get("result")
+ sop = BeautifulSoup(resp, "lxml")
+ r_json = json.loads(sop.find("script", attrs={"type": "application/ld+json"}).contents[0])
ott = await search_jw(r_json.get("title"), "en_ID")
+ typee = f"{r_json.get('@type', '')}"
res_str = ""
- if judul := r_json.get("title"):
- res_str += f"📹 Judul: {judul} [{r_json.get('year')}]\n"
- if aka := r_json.get("aka"):
+ if judul := r_json.get("name"):
+ try:
+ tahun = sop.select('ul[data-testid="hero-title-block__metadata"]')[0].find("span", class_="sc-8c396aa2-2 jwaBvf").text
+ except:
+ tahun = "N/A"
+ res_str += f"📹 Judul: {judul} [{tahun}] ({typee})\n"
+ if aka := r_json.get("alternateName"):
res_str += f"📢 AKA: {aka}\n\n"
else:
res_str += "\n"
- if durasi := r_json.get("duration"):
+ if durasi := sop.select('li[data-testid="title-techspec_runtime"]'):
+ durasi = durasi[0].find(class_="ipc-metadata-list-item__content-container").text
res_str += f"Durasi: {GoogleTranslator('auto', 'id').translate(durasi)}\n"
- if kategori := r_json.get("category"):
+ if kategori := r_json.get("contentRating"):
res_str += f"Kategori: {kategori} \n"
- if rating := r_json.get("rating"):
- res_str += f"Peringkat: {GoogleTranslator('auto', 'id').translate(rating)}\n"
- if release := r_json.get("release_date"):
- res_str += f"Rilis: {release}\n"
+ if rating := r_json.get("aggregateRating"):
+ res_str += f"Peringkat: {rating['ratingValue']}⭐️ dari {rating['ratingCount']} pengguna\n"
+ if release := sop.select('li[data-testid="title-details-releasedate"]'):
+ rilis = release[0].find(class_="ipc-metadata-list-item__list-content-item ipc-metadata-list-item__list-content-item--link").text
+ rilis_url = release[0].find(class_="ipc-metadata-list-item__list-content-item ipc-metadata-list-item__list-content-item--link")["href"]
+ res_str += f"Rilis: {rilis}\n"
if genre := r_json.get("genre"):
- res_str += f"Genre : {genre}\n"
- if negara := r_json.get("country"):
- res_str += f"Negara: {negara}\n"
- if bahasa := r_json.get("language"):
- res_str += f"Bahasa: {bahasa}\n"
+ genre = "".join(f"{GENRES_EMOJI[i]} #{i.replace('-', '_').replace(' ', '_')}, " if i in GENRES_EMOJI else f"#{i.replace('-', '_').replace(' ', '_')}, " for i in r_json["genre"])
+ genre = genre[:-2]
+ res_str += f"Genre: {genre}\n"
+ if negara := sop.select('li[data-testid="title-details-origin"]'):
+ country = "".join(
+ f"{demoji(country.text)} #{country.text.replace(' ', '_').replace('-', '_')}, "
+ for country in negara[0].findAll(class_="ipc-metadata-list-item__list-content-item ipc-metadata-list-item__list-content-item--link")
+ )
+ country = country[:-2]
+ res_str += f"Negara: {country}\n"
+ if bahasa := sop.select('li[data-testid="title-details-languages"]'):
+ language = "".join(
+ f"#{lang.text.replace(' ', '_').replace('-', '_')}, "
+ for lang in bahasa[0].findAll(class_="ipc-metadata-list-item__list-content-item ipc-metadata-list-item__list-content-item--link")
+ )
+ language = language[:-2]
+ res_str += f"Bahasa: {language}\n"
res_str += "\n🙎 Info Cast:\n"
- if director := r_json.get("director"):
+ if directors := r_json.get("director"):
+ director = ""
+ for i in directors:
+ name = i["name"]
+ url = i["url"]
+ director += f"{name}, "
+ director = director[:-2]
res_str += f"Sutradara: {director}\n"
- if creator := r_json.get("creator"):
+ if creators := r_json.get("creator"):
+ creator = ""
+ for i in creators:
+ if i["@type"] == "Person":
+ name = i["name"]
+ url = i["url"]
+ creator += f"{name}, "
+ creator = creator[:-2]
res_str += f"Penulis: {creator}\n"
if actors := r_json.get("actors"):
- res_str += f"Pemeran: {actors}\n\n"
+ actor = ""
+ for i in actors:
+ name = i["name"]
+ url = i["url"]
+ actors += f"{name}, "
+ actor = actors[:-2]
+ res_str += f"Pemeran: {actor}\n\n"
if deskripsi := r_json.get("description"):
summary = GoogleTranslator("auto", "id").translate(deskripsi)
res_str += f"📜 Plot: {summary}\n\n"
- if key_ := r_json.get("keyword"):
+ if keywd := r_json.get("keywords"):
+ keywords = keywd.split(",")
+ key_ = ""
+ for i in keywords:
+ i = i.replace(" ", "_").replace("-", "_")
+ key_ += f"#{i}, "
+ key_ = key_[:-2]
res_str += f"🔥 Kata Kunci: {key_} \n"
- if award := r_json.get("awards"):
- res_str += f"🏆 Penghargaan: {GoogleTranslator('auto', 'id').translate(award)}\n"
+ if award := sop.select('li[data-testid="award_information"]'):
+ awards = award[0].find(class_="ipc-metadata-list-item__list-content-item").text
+ res_str += f"🏆 Penghargaan: {GoogleTranslator('auto', 'id').translate(awards)}\n"
else:
res_str += "\n"
if ott != "":
@@ -352,45 +400,92 @@ async def imdb_en_callback(bot, query):
try:
url = f"https://www.imdb.com/title/tt{movie}/"
resp = await http.get(
- f"https://yasirapi.eu.org/imdb-page?url={url}",
+ url,
headers={"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/600.1.17 (KHTML, like Gecko) Version/7.1 Safari/537.85.10"},
)
- r_json = resp.json().get("result")
+ sop = BeautifulSoup(resp, "lxml")
+ r_json = json.loads(sop.find("script", attrs={"type": "application/ld+json"}).contents[0])
ott = await search_jw(r_json.get("title"), "en_US")
+ typee = f"{r_json.get('@type', '')}"
res_str = ""
if judul := r_json.get("title"):
- res_str += f"📹 Title: {judul} [{r_json.get('year')}]\n"
- if aka := r_json.get("aka"):
+ try:
+ tahun = sop.select('ul[data-testid="hero-title-block__metadata"]')[0].find("span", class_="sc-8c396aa2-2 jwaBvf").text
+ except:
+ tahun = "N/A"
+ res_str += f"📹 Judul: {judul} [{tahun}] ({typee})\n"
+ if aka := r_json.get("alternateName"):
res_str += f"📢 AKA: {aka}\n\n"
else:
res_str += "\n"
- if durasi := r_json.get("duration"):
+ if durasi := sop.select('li[data-testid="title-techspec_runtime"]'):
+ durasi = durasi[0].find(class_="ipc-metadata-list-item__content-container").text
res_str += f"Duration: {durasi}\n"
- if kategori := r_json.get("category"):
+ if kategori := r_json.get("contentRating"):
res_str += f"Category: {kategori} \n"
- if rating := r_json.get("rating"):
- res_str += f"Rating: {rating}\n"
- if release := r_json.get("release_date"):
- res_str += f"Release Data: {release}\n"
+ if rating := r_json.get("aggregateRating"):
+ res_str += f"Rating: {rating['ratingValue']}⭐️ from {rating['ratingCount']} users\n"
+ if release := sop.select('li[data-testid="title-details-releasedate"]'):
+ rilis = release[0].find(class_="ipc-metadata-list-item__list-content-item ipc-metadata-list-item__list-content-item--link").text
+ rilis_url = release[0].find(class_="ipc-metadata-list-item__list-content-item ipc-metadata-list-item__list-content-item--link")["href"]
+ res_str += f"Rilis: {rilis}\n"
if genre := r_json.get("genre"):
+ genre = "".join(f"{GENRES_EMOJI[i]} #{i.replace('-', '_').replace(' ', '_')}, " if i in GENRES_EMOJI else f"#{i.replace('-', '_').replace(' ', '_')}, " for i in r_json["genre"])
+ genre = genre[:-2]
res_str += f"Genre: {genre}\n"
- if country := r_json.get("country"):
+ if negara := sop.select('li[data-testid="title-details-origin"]'):
+ country = "".join(
+ f"{demoji(country.text)} #{country.text.replace(' ', '_').replace('-', '_')}, "
+ for country in negara[0].findAll(class_="ipc-metadata-list-item__list-content-item ipc-metadata-list-item__list-content-item--link")
+ )
+ country = country[:-2]
res_str += f"Country: {country}\n"
- if language := r_json.get("language"):
+ if bahasa := sop.select('li[data-testid="title-details-languages"]'):
+ language = "".join(
+ f"#{lang.text.replace(' ', '_').replace('-', '_')}, "
+ for lang in bahasa[0].findAll(class_="ipc-metadata-list-item__list-content-item ipc-metadata-list-item__list-content-item--link")
+ )
+ language = language[:-2]
res_str += f"Language: {language}\n"
res_str += "\n🙎 Cast Info:\n"
- if director := r_json.get("director"):
+ if directors := r_json.get("director"):
+ director = ""
+ for i in directors:
+ name = i["name"]
+ url = i["url"]
+ director += f"{name}, "
+ director = director[:-2]
res_str += f"Director: {director}\n"
- if writer := r_json.get("creator"):
- res_str += f"Writer: {writer}\n"
+ if creators := r_json.get("creator"):
+ creator = ""
+ for i in creators:
+ if i["@type"] == "Person":
+ name = i["name"]
+ url = i["url"]
+ creator += f"{name}, "
+ creator = creator[:-2]
+ res_str += f"Writer: {creator}\n"
if actors := r_json.get("actors"):
- res_str += f"Stars: {actors}\n\n"
+ actor = ""
+ for i in actors:
+ name = i["name"]
+ url = i["url"]
+ actors += f"{name}, "
+ actor = actors[:-2]
+ res_str += f"Stars: {actor}\n\n"
if description := r_json.get("description"):
res_str += f"📜 Summary: {description}\n\n"
- if key_ := r_json.get("keyword"):
+ if keywd := r_json.get("keywords"):
+ keywords = keywd.split(",")
+ key_ = ""
+ for i in keywords:
+ i = i.replace(" ", "_").replace("-", "_")
+ key_ += f"#{i}, "
+ key_ = key_[:-2]
res_str += f"🔥 Keywords: {key_} \n"
- if award := r_json.get("awards"):
- res_str += f"🏆 Awards: {award}\n"
+ if award := sop.select('li[data-testid="award_information"]'):
+ awards = award[0].find(class_="ipc-metadata-list-item__list-content-item").text
+ res_str += f"🏆 Awards: {awards}\n"
else:
res_str += "\n"
if ott != "":
diff --git a/misskaty/plugins/inline_search.py b/misskaty/plugins/inline_search.py
index cf395809..d43a8eb5 100644
--- a/misskaty/plugins/inline_search.py
+++ b/misskaty/plugins/inline_search.py
@@ -436,16 +436,16 @@ async def imdb_inl(_, query):
url = f"https://www.imdb.com/title/{movie}/"
resp = await get_content(url)
sop = BeautifulSoup(resp, "lxml")
- ott = await search_jw(r_json["name"], "en_ID")
r_json = json.loads(sop.find("script", attrs={"type": "application/ld+json"}).contents[0])
+ ott = await search_jw(r_json["name"], "en_ID")
res_str = ""
- type = f"{r_json['@type']}" if r_json.get("@type") else ""
+ typee = f"{r_json['@type']}" if r_json.get("@type") else ""
if r_json.get("name"):
try:
tahun = sop.select('ul[data-testid="hero-title-block__metadata"]')[0].find("span", class_="sc-8c396aa2-2 jwaBvf").text
except:
tahun = "N/A"
- res_str += f"📹 Judul: {r_json['name']} [{tahun}] ({type})\n"
+ res_str += f"📹 Judul: {r_json['name']} [{tahun}] ({typee})\n"
if r_json.get("alternateName"):
res_str += f"📢 AKA: {r_json.get('alternateName')}\n\n"
else: