使用Python写全网短剧搜索工具

admin 2024年3月20日01:23:43评论7 views字数 4998阅读16分39秒阅读模式

使用Python写全网短剧搜索工具

代码:

import tkinter as tk
from tkinter import ttk
from PIL import Image, ImageTk
import requests
import json

class MovieSearcher(tk.Tk):
    def __init__(self):
        super().__init__()
        self.title("短剧搜索---微信公众号:蓝胖子之家")
        self.geometry("1250x850")
        self.configure(bg="#1c1c1c")

        # 图片显示
        self.image_frame = tk.Frame(self, bg="#1c1c1c")
        self.image_frame.pack(pady=20)
        self.image_label = tk.Label(self.image_frame, bg="#1c1c1c")
        self.image_label.pack()

        # 加载并显示图片
        image = Image.open("lpz.png")
        image = image.resize((120, 100), Image.ANTIALIAS)
        photo = ImageTk.PhotoImage(image)
        self.image_label.configure(image=photo)
        self.image_label.image = photo

        # 输入框和搜索按钮
        self.search_frame = tk.Frame(self, bg="#1c1c1c")
        self.search_frame.pack(pady=10)
        self.search_entry = tk.Entry(self.search_frame, font=("Courier", 14), bg="#333333", fg="#00ff00", insertbackground="#00ff00")
        self.search_entry.pack(side=tk.LEFT, padx=10)
        self.search_button = tk.Button(self.search_frame, text="搜索", command=self.search_movies, font=("Courier", 12), bg="#00ff00", fg="#1c1c1c")
        self.search_button.pack(side=tk.LEFT)

        # 分页控件
        self.page_frame = tk.Frame(self, bg="#1c1c1c")
        self.page_frame.pack(pady=10)
        self.prev_button = tk.Button(self.page_frame, text="上一页", command=self.load_prev_page, font=("Courier", 12), bg="#00ff00", fg="#1c1c1c")
        self.prev_button.grid(row=0, column=0, padx=10)
        self.page_entry = tk.Entry(self.page_frame, width=5, font=("Courier", 12), bg="#333333", fg="#00ff00", insertbackground="#00ff00")
        self.page_entry.grid(row=0, column=1, padx=10)
        self.page_label = tk.Label(self.page_frame, text="/ 1 页", font=("Courier", 12), bg="#1c1c1c", fg="#00ff00")
        self.page_label.grid(row=0, column=2, padx=10)
        self.page_go_button = tk.Button(self.page_frame, text="跳转", command=self.go_to_page, font=("Courier", 12), bg="#00ff00", fg="#1c1c1c")
        self.page_go_button.grid(row=0, column=3, padx=10)
        self.next_button = tk.Button(self.page_frame, text="下一页", command=self.load_next_page, font=("Courier", 12), bg="#00ff00", fg="#1c1c1c")
        self.next_button.grid(row=0, column=4, padx=10)

        # 数据展示区域
        self.movie_frame = tk.Frame(self, bg="#1c1c1c")
        self.movie_frame.pack(fill=tk.BOTH, expand=True, pady=10)
        self.movie_canvas = tk.Canvas(self.movie_frame, bg="#1c1c1c", highlightthickness=0)
        self.movie_canvas.pack(side=tk.LEFT, fill=tk.BOTH, expand=True)
        self.movie_scrollbar = ttk.Scrollbar(self.movie_frame, orient=tk.VERTICAL, command=self.movie_canvas.yview)
        self.movie_scrollbar.pack(side=tk.RIGHT, fill=tk.Y)
        self.movie_canvas.configure(yscrollcommand=self.movie_scrollbar.set)
        self.movie_canvas.bind('<Configure>', lambda e: self.movie_canvas.configure(scrollregion=self.movie_canvas.bbox("all")))
        self.movie_window = self.movie_canvas.create_window((0, 0), window=tk.Frame(self.movie_canvas, bg="#1c1c1c"), anchor="nw")

        self.current_page = 1
        self.total_pages = 1

    def search_movies(self):
        keyword = self.search_entry.get()
        self.load_movies(keyword, self.current_page)

    def load_movies(self, keyword, page):
        url = f"https://api.djcat.sbs/api/movies?page={page}&limit=10&name={keyword}"
        response = requests.get(url)
        data = json.loads(response.text)

        self.total_pages = (data["data"]["total"] + 9) // 10
        self.page_label.configure(text=f"/ {self.total_pages} 页")
        self.page_entry.delete(0, tk.END)
        self.page_entry.insert(0, str(self.current_page))

        for widget in self.movie_canvas.winfo_children():
            widget.destroy()

        for movie in data["data"]["rows"]:
            movie_frame = tk.Frame(self.movie_canvas, bg="#333333")
            movie_frame.pack(fill=tk.X, padx=20, pady=10)

            movie_name = tk.Label(movie_frame, text=movie["name"], font=("Courier", 14), bg="#333333", fg="#00ff00")
            movie_name.pack(side=tk.LEFT)

            movie_link = tk.Button(movie_frame, text="打开", command=lambda link=movie["link"]: self.open_movie(link), font=("Courier", 12), bg="#00ff00", fg="#1c1c1c")
            movie_link.pack(side=tk.RIGHT)

        self.movie_canvas.configure(scrollregion=self.movie_canvas.bbox("all"))

    def load_prev_page(self):
        if self.current_page > 1:
            self.current_page -= 1
            self.search_movies()

    def load_next_page(self):
        if self.current_page < self.total_pages:
            self.current_page += 1
            self.search_movies()

    def go_to_page(self):
        try:
            page = int(self.page_entry.get())
            if 1 <= page <= self.total_pages:
                self.current_page = page
                self.search_movies()
        except ValueError:
            pass

    def open_movie(self, link):
        import webbrowser
        webbrowser.open(link)

if __name__ == '__main__':
    app = MovieSearcher()
    app.mainloop()
  1. 导入所需的模块:
    • tkinter:用于创建GUI应用程序的库。
    • ttk:提供了一组更现代化的GUI控件。
    • PIL中的ImageImageTk:用于处理和显示图像。
    • requests:用于发送HTTP请求和接收响应。
    • json:用于解析JSON数据。
  2. 创建MovieSearcher类,继承自tk.Tk
    • 初始化方法__init__设置应用程序的标题、大小和背景颜色。
    • 创建图像显示区域的FrameLabel,并加载并显示一张图片。
    • 创建搜索输入框和搜索按钮。
    • 创建分页控件,包括上一页、页码输入框、总页数和下一页按钮。
    • 创建数据展示区域的FrameCanvas和滚动条。
    • 初始化当前页和总页数为1。
  3. 定义search_movies方法:
    • 从搜索输入框获取关键词。
    • 调用load_movies方法加载电影数据。
  4. 定义load_movies方法,用于加载电影数据:
    • 构建API请求的URL,其中包括关键词和当前页码。
    • 发送HTTP请求并获取响应。
    • 解析响应的JSON数据。
    • 更新总页数和页码输入框的显示。
    • 清空数据展示区域。
    • 遍历电影数据,创建电影框架,包括电影名称和打开链接的按钮。
    • 配置滚动区域并更新画布的大小。
  5. 定义load_prev_page方法,用于加载上一页的电影数据:
    • 如果当前页大于1,则将当前页减1,并调用search_movies方法重新加载电影数据。
  6. 定义load_next_page方法,用于加载下一页的电影数据:
    • 如果当前页小于总页数,则将当前页加1,并调用search_movies方法重新加载电影数据。
  7. 定义go_to_page方法,用于跳转到指定页码的电影数据:
    • 尝试将页码输入框中的内容转换为整数。
    • 如果页码在有效范围内,则将当前页设置为指定页码,并调用search_movies方法重新加载电影数据。
  8. 定义open_movie方法,用于在浏览器中打开电影链接:
    • 导入webbrowser模块。
    • 调用webbrowser.open方法打开指定链接。
  9. __main__中创建MovieSearcher实例,并调用mainloop方法启动应用程序的事件循环。

运行效果:

使用Python写全网短剧搜索工具

后台回复短剧搜索获取文章工具

原文始发于微信公众号(蓝胖子之家):使用Python写全网短剧搜索工具

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年3月20日01:23:43
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   使用Python写全网短剧搜索工具http://cn-sec.com/archives/2587079.html

发表评论

匿名网友 填写信息