Skip to main content
Glama

Short Video MCP Server

by yangbuyiya
MIT License
38
meipai.py2.91 kB
import base64 from typing import Dict, List import fake_useragent import httpx from parsel import Selector from .base import BaseParser, VideoAuthor, VideoInfo class MeiPai(BaseParser): """ 美拍 """ async def parse_share_url(self, share_url: str) -> VideoInfo: async with httpx.AsyncClient() as client: headers = { "User-Agent": fake_useragent.UserAgent(os=["windows"]).random, } response = await client.get(share_url, headers=headers) response.raise_for_status() sel = Selector(response.text) video_bs64 = sel.css("#shareMediaBtn::attr(data-video)").get(default="") video_url = self.parse_video_bs64(video_bs64) video_info = VideoInfo( video_url=video_url, cover_url=sel.css("#detailVideo img::attr(src)").get(default=""), title=sel.css(".detail-cover-title::text").get(default="").strip(), author=VideoAuthor( uid=sel.css(".detail-name a::attr(href)") .get(default="") .split("/")[-1], name=sel.css(".detail-avatar::attr(alt)").get(default=""), avatar="https:" + sel.css(".detail-avatar::attr(src)").get(default=""), ), ) return video_info async def parse_video_id(self, video_id: str) -> VideoInfo: req_url = f"https://www.meipai.com/video/{video_id}" return await self.parse_share_url(req_url) def parse_video_bs64(self, video_bs64: str) -> str: hex_val = self.get_hex(video_bs64) dec_val = self.get_dec(hex_val["hex_1"]) d_val = self.sub_str(hex_val["str_1"], dec_val["pre"]) p_val = self.get_pos(d_val, dec_val["tail"]) kk_val = self.sub_str(d_val, p_val) decode_bs64 = base64.b64decode(kk_val) video_url = "https:" + decode_bs64.decode("utf-8") return video_url def get_hex(self, s: str) -> Dict[str, str]: hex_val = s[:4] str_val = s[4:] return {"hex_1": self.reverse_string(hex_val), "str_1": str_val} @staticmethod def get_dec(hex_val: str) -> Dict[str, List[int]]: int_n = int(hex_val, 16) str_n = str(int_n) length = len(str_n) pre = [int(str_n[i]) for i in range(length) if i < length - 2] tail = [int(str_n[i]) for i in range(length) if i >= length - 2] return {"pre": pre, "tail": tail} @staticmethod def sub_str(s: str, b: List[int]) -> str: index_1 = b[0] index_2 = b[0] + b[1] c = s[:index_1] d = s[index_1:index_2] temp = s[index_2:].replace(d, "") return c + temp @staticmethod def get_pos(s: str, b: List[int]) -> List[int]: b[0] = len(s) - b[0] - b[1] return b @staticmethod def reverse_string(s: str) -> str: return s[::-1]

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/yangbuyiya/yby6-crawling-short-video-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server