88
99class API (APIBase ):
1010 @staticmethod
11- def get (url : str ) -> tuple [Union [str , bytes ], str , str ]:
11+ def get (url : str , browser_emulation_api_flag : bool = False ) -> tuple [Union [str , bytes ], str , str ]:
1212 """api规范
1313
1414 Args:
1515 url (str): [http://,https://]aaa.com
16+ browser_emulation_api_flag (bool): 如果是通过模拟浏览器api调用的api,这个flag为True
1617
1718 Returns:
1819 tuple[Union[str, bytes], str, str]: 需要写入文件的值,文件后缀,写入模式('binary' / 'text')
1920 """
20- r : requests .Response = requests .get (url = f'{ url } /favicon.ico' ,headers = headers )
21- return r .content , 'ico' , 'binary'
22-
21+ r : requests .Response = requests .get (url = f'{ url } /favicon.ico' , headers = headers )
22+ content : bytes = r .content
23+
24+ if not r .encoding : # r.encoding是None那多半不是html文件了
25+ return content , 'ico' , 'binary'
26+
27+ print (r .encoding )
28+ content_str : str = content .decode (r .encoding )
29+
30+ for line in content_str .splitlines ():
31+ if not line : continue # 空行跳过
32+
33+ if line == '<!DOCTYPE html>' :
34+ if browser_emulation_api_flag :
35+ return f'该网站无可用favicon\n 如您使用实际访问该网站 { url } 有favicon\n 请向该项目提出issue: https://github.com/HowieHz/get_favicon/issues/new \n 或使用邮箱与作者联系,也可以选择加入讨论群反馈,感谢您的支持' , 'txt' , 'text'
36+ return f'{ url } 无法使用此api获取favicon' , 'txt' , 'text'
37+ else :
38+ break # 第一个有内容的行不是<!DOCTYPE html>那就不是html文件了
39+
40+ return content , 'ico' , 'binary'
0 commit comments