url.py 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. #!/usr/bin/env python3
  2. import json
  3. import time
  4. import os
  5. import requests
  6. import warnings
  7. import re
  8. from urllib3.exceptions import InsecureRequestWarning
  9. warnings.simplefilter('ignore', InsecureRequestWarning)
  10. site_mappings = {
  11. '立播': 'libo',
  12. '欧哥': 'ouge',
  13. '小米': 'xiaomi',
  14. '多多': 'duoduo',
  15. '蜡笔': 'labi',
  16. '至臻': 'zhizhen',
  17. '木偶': 'mogg',
  18. '虎斑': 'huban',
  19. '下饭': 'xiafan',
  20. '玩偶': 'wogg',
  21. '星剧社': 'star2',
  22. '二小': 'erxiao',
  23. '大玩ou': 'dawanou',
  24. '玩偶叔叔': 'woss',
  25. '百家影音': 'baijia',
  26. '闪电': 'shandian'
  27. }
  28. buye_mappings = {
  29. '立播': 'libo',
  30. '欧哥': 'ouge',
  31. '小米': 'xmi',
  32. '多多': 'duo',
  33. '蜡笔': 'labi',
  34. '至臻': 'zhiz',
  35. '木偶': 'muo',
  36. '虎斑': 'hub',
  37. '下饭': 'xiaf',
  38. '玩偶': 'wogg',
  39. '星剧社': 'star2',
  40. '二小': 'erxiao',
  41. '大玩ou': 'dawanou',
  42. '玩偶叔叔': 'woss',
  43. '百家影音': 'baijia',
  44. '闪电': 'sd'
  45. }
  46. def test_url(url):
  47. try:
  48. response = requests.get(url.strip(), timeout=5, verify=False)
  49. return response.status_code == 200
  50. except:
  51. return False
  52. def get_best_url(urls):
  53. if not isinstance(urls, list):
  54. return urls.strip()
  55. if len(urls) == 1:
  56. return urls[0].strip()
  57. default_url = urls[0].strip()
  58. for i in range(0, len(urls), 2):
  59. test_urls = urls[i:i+2]
  60. for url in test_urls:
  61. if test_url(url):
  62. return url.strip()
  63. return default_url
  64. def get_star2_real_url(source_url):
  65. try:
  66. response = requests.get(source_url, timeout=5, verify=False)
  67. if response.status_code == 200:
  68. match = re.search(r'https?://[^"\'\s<>]+?star2\.cn[^"\'\s<>]*', response.text)
  69. if match:
  70. real_url = match.group(0).strip()
  71. print(f"从源站获取到星剧社真实链接: {real_url}")
  72. return real_url
  73. except Exception as e:
  74. print(f"获取星剧社真实链接失败: {str(e)}")
  75. return None
  76. def process_urls(existing_urls):
  77. url_data = {}
  78. buye_data = {}
  79. try:
  80. if not os.path.exists('yuan.json'):
  81. print("yuan.json 文件不存在")
  82. return False
  83. with open('yuan.json', 'r', encoding='utf-8') as f:
  84. yuan_data = json.load(f)
  85. base_data = {}
  86. for cn_name, urls in yuan_data.items():
  87. if urls:
  88. if cn_name == '星剧社':
  89. source_url = get_best_url(urls if isinstance(urls, list) else [urls])
  90. if source_url:
  91. real_url = get_star2_real_url(source_url)
  92. if real_url:
  93. base_data[cn_name] = real_url
  94. print(f"添加 {cn_name} 链接: {real_url}")
  95. elif cn_name in site_mappings and site_mappings[cn_name] in existing_urls:
  96. base_data[cn_name] = existing_urls[site_mappings[cn_name]]
  97. print(f"保持 {cn_name} 原有链接")
  98. else:
  99. best_url = get_best_url(urls if isinstance(urls, list) else [urls])
  100. if best_url:
  101. base_data[cn_name] = best_url
  102. print(f"添加 {cn_name} 链接: {best_url}")
  103. elif cn_name in site_mappings and site_mappings[cn_name] in existing_urls:
  104. base_data[cn_name] = existing_urls[site_mappings[cn_name]]
  105. print(f"保持 {cn_name} 原有链接")
  106. for cn_name, url in base_data.items():
  107. if cn_name in site_mappings:
  108. url_data[site_mappings[cn_name]] = url
  109. if cn_name in buye_mappings:
  110. buye_data[buye_mappings[cn_name]] = url
  111. if url_data:
  112. with open('url.json', 'w', encoding='utf-8') as f:
  113. json.dump(url_data, f, ensure_ascii=False, indent=2)
  114. with open('buye.json', 'w', encoding='utf-8') as f:
  115. json.dump(buye_data, f, ensure_ascii=False, indent=2)
  116. print(f"成功更新 url.json 和 buye.json")
  117. return True
  118. print("没有新的有效数据")
  119. return False
  120. except Exception as e:
  121. print(f"处理出错: {str(e)}")
  122. return False
  123. def main():
  124. print("开始更新 URL...")
  125. existing_urls = {}
  126. try:
  127. if os.path.exists('url.json'):
  128. with open('url.json', 'r', encoding='utf-8') as f:
  129. existing_urls = json.load(f)
  130. except Exception as e:
  131. print(f"读取 url.json 失败: {str(e)}")
  132. if process_urls(existing_urls):
  133. print("更新完成")
  134. else:
  135. print("更新失败,保持文件不变")
  136. if __name__ == "__main__":
  137. main()