Skip to content

Commit

Permalink
fix circular import
Browse files Browse the repository at this point in the history
  • Loading branch information
aturret committed Nov 21, 2024
1 parent 2c8ec93 commit ad3f24d
Show file tree
Hide file tree
Showing 5 changed files with 102 additions and 85 deletions.
10 changes: 7 additions & 3 deletions app/routers/inoreader.py
Original file line number Diff line number Diff line change
@@ -1,13 +1,17 @@
from fastapi import APIRouter
from fastapi.requests import Request

from app.config import TELEGRAM_CHANNEL_ID, INOREADER_APP_ID, INOREADER_APP_KEY
from app.services.inoreader import Inoreader, process_inoreader_data, get_inoreader_item_async
from app.config import INOREADER_APP_ID, INOREADER_APP_KEY
from app.services.inoreader import Inoreader
from app.services.inoreader.telegram_process import (
get_inoreader_item_async,
process_inoreader_data,
default_telegram_channel_id
)
from fastapi import Security
from app.auth import verify_api_key

router = APIRouter(prefix="/inoreader")
default_telegram_channel_id = TELEGRAM_CHANNEL_ID[0] if TELEGRAM_CHANNEL_ID else None


async def get_inoreader_webhook_data(data: dict):
Expand Down
2 changes: 2 additions & 0 deletions app/services/file_export/video_download/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ def __init__(
):
self.extractor = category
self.url = url
self.author_url = ""
self.download = download
self.audio_only = audio_only
self.transcribe = transcribe
Expand Down Expand Up @@ -60,6 +61,7 @@ async def get_video(self) -> None:
}
meta_info = video_info_funcs[self.extractor](content_info)
self._video_info_formatting(meta_info)
# AI transcribe
if self.transcribe:
audio_content_info = await self.get_video_info(audio_only=True)
audio_file_path = audio_content_info["file_path"]
Expand Down
83 changes: 2 additions & 81 deletions app/services/inoreader/__init__.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from typing import Optional, Union, Dict
from typing import Optional
from urllib.parse import quote

import httpx
Expand All @@ -7,12 +7,9 @@
from httpx import Response

from app.models.metadata_item import MetadataItem, MediaFile, MessageType
from app.models.url_metadata import UrlMetadata
from app.routers.inoreader import default_telegram_channel_id
from app.services.telegram_bot import send_item_message
from app.utils.network import HEADERS
from app.utils.logger import logger
from app.utils.parse import get_html_text_length, get_url_metadata, get_bool
from app.utils.parse import get_html_text_length
from app.config import (
INOREADER_APP_ID,
INOREADER_APP_KEY,
Expand Down Expand Up @@ -171,79 +168,3 @@ async def get_api_info(
return resp


async def process_inoreader_data(
data: list,
use_inoreader_content: bool,
telegram_channel_id: Union[int, str] = default_telegram_channel_id,
stream_id: str = None,
):
for item in data:
url_type_item = await get_url_metadata(item["aurl"])
url_type_dict = url_type_item.to_dict()
logger.debug(f"ino original: {use_inoreader_content}")
if (
use_inoreader_content is True
or url_type_dict["content_type"] == "unknown"
):
is_video = url_type_dict["content_type"] == "video"
content_type = url_type_dict["content_type"] if is_video else "social_media"
source = url_type_dict["source"] if is_video else "inoreader"
url_metadata = UrlMetadata(
url=item["aurl"],
content_type=content_type,
source=source,
)
metadata_item = InfoExtractService(
url_metadata=url_metadata,
data=item,
store_document=True,
category=item["category"],
)
else:
metadata_item = InfoExtractService(
url_metadata=url_type_item,
data=item,
store_document=True,
)
message_metadata_item = await metadata_item.get_item()
await send_item_message(message_metadata_item, chat_id=telegram_channel_id)
if stream_id:
await Inoreader.mark_all_as_read(
stream_id=stream_id, timestamp=item["timestamp"] - 1
)


async def get_inoreader_item_async(
data: Optional[Dict] = None,
trigger: bool = False,
params: Optional[Dict] = None,
# filters: Optional[Dict] = None,
) -> None:
stream_id = None
use_inoreader_content = True
telegram_channel_id = default_telegram_channel_id
if trigger and params and not data:
logger.debug(f"params:{params}")
use_inoreader_content = get_bool(params.get("useInoreaderContent"), True)
stream_type = params.get("streamType", "broadcast")
telegram_channel_id = params.get("channelId", default_telegram_channel_id)
tag = params.get("tag", None)
feed = params.get("feed", None)
the_remaining_params = {
k: v
for k, v in params.items()
if k not in ["streamType", "channelId", "tag", "feed"]
}
data = await Inoreader.get_api_item_data(
stream_type=stream_type, tag=tag, params=the_remaining_params, feed=feed
)
if not data:
return
stream_id = Inoreader.get_stream_id(stream_type=stream_type, tag=tag, feed=feed)
if type(data) is dict:
data = [data]
await process_inoreader_data(
data, use_inoreader_content, telegram_channel_id, stream_id
)
if stream_id:
await Inoreader.mark_all_as_read(stream_id=stream_id)
89 changes: 89 additions & 0 deletions app/services/inoreader/telegram_process.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
from typing import Union, Optional, Dict

from app.config import TELEGRAM_CHANNEL_ID
from app.models.url_metadata import UrlMetadata
from app.services.inoreader import Inoreader
from app.services.scrapers.common import InfoExtractService
from app.services.telegram_bot import send_item_message
from app.utils.logger import logger
from app.utils.parse import get_url_metadata, get_bool

default_telegram_channel_id = TELEGRAM_CHANNEL_ID[0] if TELEGRAM_CHANNEL_ID else None


async def process_inoreader_data(
data: list,
use_inoreader_content: bool,
telegram_channel_id: Union[int, str] = default_telegram_channel_id,
stream_id: str = None,
):
for item in data:
url_type_item = await get_url_metadata(item["aurl"])
url_type_dict = url_type_item.to_dict()
logger.debug(f"ino original: {use_inoreader_content}")
if (
use_inoreader_content is True
or url_type_dict["content_type"] == "unknown"
):
is_video = url_type_dict["content_type"] == "video"
content_type = url_type_dict["content_type"] if is_video else "social_media"
source = url_type_dict["source"] if is_video else "inoreader"
url_metadata = UrlMetadata(
url=item["aurl"],
content_type=content_type,
source=source,
)
metadata_item = InfoExtractService(
url_metadata=url_metadata,
data=item,
store_document=True,
category=item["category"],
)
else:
metadata_item = InfoExtractService(
url_metadata=url_type_item,
data=item,
store_document=True,
)
message_metadata_item = await metadata_item.get_item()
await send_item_message(message_metadata_item, chat_id=telegram_channel_id)
if stream_id:
await Inoreader.mark_all_as_read(
stream_id=stream_id, timestamp=item["timestamp"] - 1
)


async def get_inoreader_item_async(
data: Optional[Dict] = None,
trigger: bool = False,
params: Optional[Dict] = None,
# filters: Optional[Dict] = None,
) -> None:
stream_id = None
use_inoreader_content = True
telegram_channel_id = default_telegram_channel_id
if trigger and params and not data:
logger.debug(f"params:{params}")
use_inoreader_content = get_bool(params.get("useInoreaderContent"), True)
stream_type = params.get("streamType", "broadcast")
telegram_channel_id = params.get("channelId", default_telegram_channel_id)
tag = params.get("tag", None)
feed = params.get("feed", None)
the_remaining_params = {
k: v
for k, v in params.items()
if k not in ["streamType", "channelId", "tag", "feed"]
}
data = await Inoreader.get_api_item_data(
stream_type=stream_type, tag=tag, params=the_remaining_params, feed=feed
)
if not data:
return
stream_id = Inoreader.get_stream_id(stream_type=stream_type, tag=tag, feed=feed)
if type(data) is dict:
data = [data]
await process_inoreader_data(
data, use_inoreader_content, telegram_channel_id, stream_id
)
if stream_id:
await Inoreader.mark_all_as_read(stream_id=stream_id)
3 changes: 2 additions & 1 deletion app/services/scrapers/common.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@
from app.models.metadata_item import MessageType
from app.services import (
telegraph,
inoreader, )
inoreader
)
from app.services.file_export import video_download
from app.services.scrapers import twitter, wechat, reddit, weibo, zhihu, douban, instagram, xiaohongshu, threads

Expand Down

0 comments on commit ad3f24d

Please sign in to comment.