add http_client

This commit is contained in:
felinae98 2022-05-22 21:38:18 +08:00
parent 5057d28e6d
commit 905476f9d5
No known key found for this signature in database
GPG Key ID: 00C8B010587FF610
11 changed files with 46 additions and 33 deletions

View File

@ -1,12 +1,12 @@
import json
from typing import Any
import httpx
from bs4 import BeautifulSoup as bs
from nonebot.plugin import require
from ..post import Post
from ..types import Category, RawPost, Target
from ..utils import http_client
from .platform import CategoryNotSupport, NewMessage, StatusChange
@ -26,7 +26,7 @@ class Arknights(NewMessage):
return "明日方舟游戏信息"
async def get_sub_list(self, _) -> list[RawPost]:
async with httpx.AsyncClient() as client:
async with http_client() as client:
raw_data = await client.get(
"https://ak-conf.hypergryph.com/config/prod/announce_meta/IOS/announcement.meta.json"
)
@ -44,7 +44,7 @@ class Arknights(NewMessage):
async def parse(self, raw_post: RawPost) -> Post:
announce_url = raw_post["webUrl"]
text = ""
async with httpx.AsyncClient() as client:
async with http_client() as client:
raw_html = await client.get(announce_url)
soup = bs(raw_html.text, "html.parser")
pics = []
@ -99,7 +99,7 @@ class AkVersion(StatusChange):
return "明日方舟游戏信息"
async def get_status(self, _):
async with httpx.AsyncClient() as client:
async with http_client() as client:
res_ver = await client.get(
"https://ak-conf.hypergryph.com/config/prod/official/IOS/version"
)
@ -155,7 +155,7 @@ class MonsterSiren(NewMessage):
return "明日方舟游戏信息"
async def get_sub_list(self, _) -> list[RawPost]:
async with httpx.AsyncClient() as client:
async with http_client() as client:
raw_data = await client.get("https://monster-siren.hypergryph.com/api/news")
return raw_data.json()["data"]["list"]
@ -170,7 +170,7 @@ class MonsterSiren(NewMessage):
async def parse(self, raw_post: RawPost) -> Post:
url = f'https://monster-siren.hypergryph.com/info/{raw_post["cid"]}'
async with httpx.AsyncClient() as client:
async with http_client() as client:
res = await client.get(
f'https://monster-siren.hypergryph.com/api/news/{raw_post["cid"]}'
)
@ -207,7 +207,7 @@ class TerraHistoricusComic(NewMessage):
return "明日方舟游戏信息"
async def get_sub_list(self, _) -> list[RawPost]:
async with httpx.AsyncClient() as client:
async with http_client() as client:
raw_data = await client.get(
"https://terra-historicus.hypergryph.com/api/recentUpdate"
)

View File

@ -1,10 +1,9 @@
import json
from typing import Any, Optional
import httpx
from ..post import Post
from ..types import Category, RawPost, Tag, Target
from ..utils import http_client
from .platform import CategoryNotSupport, NewMessage
@ -28,7 +27,7 @@ class Bilibili(NewMessage):
has_target = True
async def get_target_name(self, target: Target) -> Optional[str]:
async with httpx.AsyncClient() as client:
async with http_client() as client:
res = await client.get(
"https://api.bilibili.com/x/space/acc/info", params={"mid": target}
)
@ -38,7 +37,7 @@ class Bilibili(NewMessage):
return res_data["data"]["name"]
async def get_sub_list(self, target: Target) -> list[RawPost]:
async with httpx.AsyncClient() as client:
async with http_client() as client:
params = {"host_uid": target, "offset": 0, "need_top": 0}
res = await client.get(
"https://api.vc.bilibili.com/dynamic_svr/v1/dynamic_svr/space_history",

View File

@ -1,9 +1,8 @@
from typing import Any
import httpx
from ..post import Post
from ..types import RawPost, Target
from ..utils import http_client
from .platform import NewMessage
@ -23,7 +22,7 @@ class FF14(NewMessage):
return "最终幻想XIV官方公告"
async def get_sub_list(self, _) -> list[RawPost]:
async with httpx.AsyncClient() as client:
async with http_client() as client:
raw_data = await client.get(
"https://ff.web.sdo.com/inc/newdata.ashx?url=List?gameCode=ff&category=5309,5310,5311,5312,5313&pageIndex=0&pageSize=5"
)

View File

@ -1,9 +1,8 @@
from typing import Any, Optional
import httpx
from ..post import Post
from ..types import RawPost, Target
from ..utils import http_client
from .platform import NewMessage
@ -20,7 +19,7 @@ class NcmArtist(NewMessage):
has_target = True
async def get_target_name(self, target: Target) -> Optional[str]:
async with httpx.AsyncClient() as client:
async with http_client() as client:
res = await client.get(
"https://music.163.com/api/artist/albums/{}".format(target),
headers={"Referer": "https://music.163.com/"},
@ -31,7 +30,7 @@ class NcmArtist(NewMessage):
return res_data["artist"]["name"]
async def get_sub_list(self, target: Target) -> list[RawPost]:
async with httpx.AsyncClient() as client:
async with http_client() as client:
res = await client.get(
"https://music.163.com/api/artist/albums/{}".format(target),
headers={"Referer": "https://music.163.com/"},

View File

@ -1,9 +1,8 @@
from typing import Any, Optional
import httpx
from ..post import Post
from ..types import RawPost, Target
from ..utils import http_client
from .platform import NewMessage
@ -20,7 +19,7 @@ class NcmRadio(NewMessage):
has_target = True
async def get_target_name(self, target: Target) -> Optional[str]:
async with httpx.AsyncClient() as client:
async with http_client() as client:
res = await client.post(
"http://music.163.com/api/dj/program/byradio",
headers={"Referer": "https://music.163.com/"},
@ -32,7 +31,7 @@ class NcmRadio(NewMessage):
return res_data["programs"][0]["radio"]["name"]
async def get_sub_list(self, target: Target) -> list[RawPost]:
async with httpx.AsyncClient() as client:
async with http_client() as client:
res = await client.post(
"http://music.163.com/api/dj/program/byradio",
headers={"Referer": "https://music.163.com/"},

View File

@ -2,11 +2,11 @@ import calendar
from typing import Any, Optional
import feedparser
import httpx
from bs4 import BeautifulSoup as bs
from ..post import Post
from ..types import RawPost, Target
from ..utils import http_client
from .platform import NewMessage
@ -23,7 +23,7 @@ class Rss(NewMessage):
has_target = True
async def get_target_name(self, target: Target) -> Optional[str]:
async with httpx.AsyncClient() as client:
async with http_client() as client:
res = await client.get(target, timeout=10.0)
feed = feedparser.parse(res.text)
return feed["feed"]["title"]
@ -35,7 +35,7 @@ class Rss(NewMessage):
return post.id
async def get_sub_list(self, target: Target) -> list[RawPost]:
async with httpx.AsyncClient() as client:
async with http_client() as client:
res = await client.get(target, timeout=10.0)
feed = feedparser.parse(res)
entries = feed.entries

View File

@ -3,12 +3,12 @@ import re
from datetime import datetime
from typing import Any, Optional
import httpx
from bs4 import BeautifulSoup as bs
from nonebot.log import logger
from ..post import Post
from ..types import *
from ..utils import http_client
from .platform import NewMessage
@ -30,7 +30,7 @@ class Weibo(NewMessage):
has_target = True
async def get_target_name(self, target: Target) -> Optional[str]:
async with httpx.AsyncClient() as client:
async with http_client() as client:
param = {"containerid": "100505" + target}
res = await client.get(
"https://m.weibo.cn/api/container/getIndex", params=param
@ -42,7 +42,7 @@ class Weibo(NewMessage):
return None
async def get_sub_list(self, target: Target) -> list[RawPost]:
async with httpx.AsyncClient() as client:
async with http_client() as client:
params = {"containerid": "107603" + target}
res = await client.get(
"https://m.weibo.cn/api/container/getIndex?", params=params, timeout=4.0
@ -128,7 +128,7 @@ class Weibo(NewMessage):
retweeted = True
pic_num = info["retweeted_status"]["pic_num"] if retweeted else info["pic_num"]
if info["isLongText"] or pic_num > 9:
async with httpx.AsyncClient() as client:
async with http_client() as client:
res = await client.get(
"https://m.weibo.cn/detail/{}".format(info["mid"]), headers=header
)

View File

@ -1,3 +1,5 @@
from typing import Optional
import nonebot
from pydantic import BaseSettings
@ -15,6 +17,7 @@ class PlugConfig(BaseSettings):
bison_use_pic_merge: int = 0 # 多图片时启用图片合并转发(仅限群),当bison_use_queue为False时该配置不会生效
# 0不启用1首条消息单独发送剩余照片合并转发2以及以上所有消息全部合并转发
bison_resend_times: int = 0
bison_proxy: Optional[str]
class Config:
extra = "ignore"

View File

@ -3,13 +3,12 @@ from functools import reduce
from io import BytesIO
from typing import Optional, Union
import httpx
from nonebot.adapters.onebot.v11.message import Message, MessageSegment
from nonebot.log import logger
from PIL import Image
from .plugin_config import plugin_config
from .utils import parse_text
from .utils import http_client, parse_text
@dataclass
@ -34,7 +33,7 @@ class Post:
async def _pic_url_to_image(self, data: Union[str, bytes]) -> Image.Image:
pic_buffer = BytesIO()
if isinstance(data, str):
async with httpx.AsyncClient() as client:
async with http_client() as client:
res = await client.get(data)
pic_buffer.write(res.content)
else:

View File

@ -8,7 +8,10 @@ from nonebot.adapters.onebot.v11.message import MessageSegment
from nonebot.log import default_format, logger
from nonebot.plugin import require
from .plugin_config import plugin_config
from ..plugin_config import plugin_config
from .http import http_client
__all__ = ["http_client", "Singleton", "parse_text", "html_to_text"]
class Singleton(type):

View File

@ -0,0 +1,12 @@
import functools
import httpx
from ..plugin_config import plugin_config
if plugin_config.bison_proxy:
http_client = functools.partial(
httpx.AsyncClient, proxies=plugin_config.bison_proxy
)
else:
http_client = httpx.AsyncClient