From 5136b96a45d4fc9741276d0c08527a0b77628dcf Mon Sep 17 00:00:00 2001 From: Yasir Aris M Date: Tue, 24 Sep 2024 10:23:49 +0700 Subject: [PATCH] Refactor movieku scraper v2 --- misskaty/plugins/web_scraper.py | 73 ++++++++++++++++++++++----------- 1 file changed, 50 insertions(+), 23 deletions(-) diff --git a/misskaty/plugins/web_scraper.py b/misskaty/plugins/web_scraper.py index 1cd15612..284cebbc 100644 --- a/misskaty/plugins/web_scraper.py +++ b/misskaty/plugins/web_scraper.py @@ -236,7 +236,7 @@ async def getDataKuso(msg, kueri, CurrentPage, user, strings): # Movieku GetData -async def getDataMovieku(msg, kueri, CurrentPage, strings): +async def getDataMovieku(msg, kueri, CurrentPage, user, strings): if not SCRAP_DICT.get(msg.id): moviekudata = [] with contextlib.redirect_stdout(sys.stderr): @@ -264,6 +264,7 @@ async def getDataMovieku(msg, kueri, CurrentPage, strings): SCRAP_DICT.add(msg.id, [split_arr(moviekudata, 6), kueri], timeout=1800) index = int(CurrentPage - 1) PageLen = len(SCRAP_DICT[msg.id][0]) + extractbtn = [] moviekuResult = ( strings("header_no_query").format(web="Movieku", cmd="movieku") @@ -271,8 +272,13 @@ async def getDataMovieku(msg, kueri, CurrentPage, strings): else strings("header_with_query").format(web="Movieku", kueri=kueri) ) for c, i in enumerate(SCRAP_DICT[msg.id][0][index], start=1): - moviekuResult += f"{index*6+c}. {i['judul']}\n{strings('quality')}/Status: {i['type']}\nExtract: /movieku_scrap {i['link']}\n\n" - return moviekuResult, PageLen + moviekuResult += f"{index*6+c}. {i['judul']}\n{strings('quality')}/Status: {i['type']}\n\n" + extractbtn.append( + InlineButton( + index * 6 + c, f"moviekuextract#{CurrentPage}#{c}#{user}#{msg.id}" + ) + ) + return moviekuResult, PageLen, extractbtn # NoDrakor GetData @@ -846,7 +852,7 @@ async def movieku_s(self, ctx: Message, strings): kueri = "" pesan = await ctx.reply_msg(strings("get_data"), quote=True) CurrentPage = 1 - moviekures, PageLen = await getDataMovieku(pesan, kueri, CurrentPage, strings) + moviekures, PageLen, btn = await getDataMovieku(pesan, kueri, CurrentPage, ctx.from_user.id, strings) if not moviekures: return keyboard = InlineKeyboard() @@ -855,6 +861,8 @@ async def movieku_s(self, ctx: Message, strings): CurrentPage, "page_movieku#{number}" + f"#{pesan.id}#{ctx.from_user.id}", ) + keyboard.row(InlineButton(strings("ex_data"), user_id=self.me.id)) + keyboard.row(*btn) keyboard.row(InlineButton(strings("cl_btn"), f"close#{ctx.from_user.id}")) await pesan.edit_msg( moviekures, disable_web_page_preview=True, reply_markup=keyboard @@ -1038,7 +1046,7 @@ async def lendrivepage_callback(self, callback_query, strings): # Movieku Page Callback @app.on_cb("page_movieku#") @use_chat_lang() -async def moviekupage_callback(_, callback_query, strings): +async def moviekupage_callback(self, callback_query, strings): try: if callback_query.from_user.id != int(callback_query.data.split("#")[3]): return await callback_query.answer(strings("unauth"), True) @@ -1051,8 +1059,8 @@ async def moviekupage_callback(_, callback_query, strings): return await callback_query.message.edit_msg(strings("invalid_cb"), True) try: - moviekures, PageLen = await getDataMovieku( - callback_query.message, kueri, CurrentPage, strings + moviekures, PageLen, btn = await getDataMovieku( + callback_query.message, kueri, CurrentPage, callback_query.from_user.id, strings ) except TypeError: return @@ -1063,6 +1071,8 @@ async def moviekupage_callback(_, callback_query, strings): CurrentPage, "page_movieku#{number}" + f"#{message_id}#{callback_query.from_user.id}", ) + keyboard.row(InlineButton(strings("ex_data"), user_id=self.me.id)) + keyboard.row(*btn) keyboard.row( InlineButton(strings("cl_btn"), f"close#{callback_query.from_user.id}") ) @@ -1440,13 +1450,32 @@ async def nodrakorddl_scrap(_, callback_query, strings): ) -# Scrape Link Download Movieku.CC -@app.on_cmd("movieku_scrap") +# Scrape DDL Link Melongmovie +@app.on_cb("moviekuextract#") @use_chat_lang() -async def muviku_scrap(_, message, strings): +async def movieku_scrap(_, callback_query, strings): + try: + if callback_query.from_user.id != int(callback_query.data.split("#")[3]): + return await callback_query.answer(strings("unauth"), True) + idlink = int(callback_query.data.split("#")[2]) + message_id = int(callback_query.data.split("#")[4]) + CurrentPage = int(callback_query.data.split("#")[1]) + link = SCRAP_DICT[message_id][0][CurrentPage - 1][idlink - 1].get("link") + except QueryIdInvalid: + return + except KeyError: + return await callback_query.message.edit_msg(strings("invalid_cb")) + + keyboard = InlineKeyboard() + keyboard.row( + InlineButton( + strings("back_btn"), + f"page_movieku#{CurrentPage}#{message_id}#{callback_query.from_user.id}", + ), + InlineButton(strings("cl_btn"), f"close#{callback_query.from_user.id}"), + ) with contextlib.redirect_stdout(sys.stderr): try: - link = message.text.split(maxsplit=1)[1] html = await fetch.get(link) html.raise_for_status() soup = BeautifulSoup(html.text, "lxml") @@ -1466,6 +1495,7 @@ async def muviku_scrap(_, message, strings): if strong_tag: resolution = strong_tag.text.strip() if resolution in valid_resolutions: + total_links += 1 links = ', '.join([f'{a.text.strip()}' for a in element.find_all('a')]) data[current_title].append(f"{resolution} {links}") @@ -1473,24 +1503,21 @@ async def muviku_scrap(_, message, strings): output.append(title) output.extend(resolutions) output.append('') - for res in resolutions: - total_links += res.count('