Skip to main content

Search anything on Yahoo: web pages, news, videos, autocomplete, and weather.

Project description

yahoo-search

GitHub issues PyPI - License

Search anything on Yahoo: web pages, news, videos, autocomplete, and weather.

$ pip install yahoo-search-py

Simple API

Simple and Pythonic API with Pydantic.

Get almost every result: also_try, pages, card, and related_searches.

from yahoo_search import search

result = search("chocolate")
print(result.pages[0])
See Example Output
PageResult(
    title='Chocolate - Wikipedia',
    link='https://en.wikipedia.org/wiki/Chocolate',
    text='A "cocoa product" is defined as a food product that is sourced from cocoa beans and contains "cocoa nibs, cocoa liquor, cocoa mass, unsweetened chocolate, bitter chocolate, chocolate liquor, cocoa, low-fat cocoa, cocoa powder, or low-fat cocoa powder". Conching. Main article: Conching.'
)

Yahoo News Search

You can also search news with ease.

from yahoo_search import search_news

result = search_news("taiwan")
print(result.news[0])
See Example Output
News(
    title='How to take the Taiwan Design Expo personality test that\'s trending on IG Stories',
    thumbnail='https://s.yimg.com/fz/api/res/1.2/(...)',
    source='Lifestyle Asia via Yahoo Style Singapore',
    text='If you\'ve always wanted to know your personality type beyond the conventional MBTI variants, it\'s...'
)

Yahoo Videos Search

Search and preview online videos easily.

from yahoo_search import search_videos

result = search_videos("jvke - golden hour")
print(result.videos[0].video_preview)
See Example Output
https://tse3.mm.bing.net/th?id=OM.7UQt_nfsv8nF0A_1687237113&pid=Api

Yahoo Weather

Get the weather, because why not.

from yahoo_search import weather

w = weather()
print(w.celsius)
print(w.forecast["Monday"])
See Example Output
30
WeatherForecast(
    fahrenheit=HighLowTemperature(
        highest=92,
        lowest=78
    ),
    celsius=HighLowTemperature(
        highest=34,
        lowest=26
    ),
    weather=WeatherForecastInner(
        text='Haze',
        icon='https://s.yimg.com/g/images/spaceball.gif'
    ),
    precipitation=Precipitation(
        icon='https://s.yimg.com/g/images/spaceball.gif',
        percentage='0%'
    )
)

Yahoo Autocomplete

You can add autocompletes to your applications.

from yahoo_search import autocomplete

print(autocomplete("hello"))
See Example Output
["hello fresh", "hello kitty", "hello molly", "hello neighbor", "hello october", "hello fresh log in to my account", "hello october images", "hello kitty coloring pages", "hello magazine", "hellosign"]

Examples

Below are some simple examples (and inspirations):

Simple App — Yahoo Search

Below is a simple app that implements Yahoo searching right in your terminal.

from yahoo_search import search

while True:
    query = input("search: ")
    result = search(query)

    if result.card:
        # if there's a wikipedia definition
        print("meaning", result.card.heading)
        print(result.card.text)

    for page in result.pages:
        print(page.title, page.link)
        print(page.text)

    for search in result.related_searches:
        print("related search: ", search.text)

Minutely News — Yahoo News

Tired of "hourly" or "daily" news? Try minutely, and let them fill into your mind... full of news.

import time

from yahoo_search import search_news

keywords = ("news", "taiwan", "usa", "chocolate")
current = 0

while True:
    result = search_news(keywords[current])
    for news in result.news:
        print(news.title)
        print(news.text)
        print()

    # loop through the keywords
    current += 1
    current %= len(keywords)

    time.sleep(60)

Video Previewer API — Yahoo Videos

We love public APIs, so let's make our own.

import fastapi
from yahoo_search import search_videos

app = fastapi.FastAPI()

@app.get("/preview")
def preview_video(query: str):
    # takes the URL param
    res = search_videos(query)
    return {
        "url": res.videos[0].video_preview
    }

Weather Forecast App — Yahoo Weather

Nawh, I ain't gonna setup a whole Flask app for this 💀💀

Terminal app is enough.

from yahoo_search import weather

res = weather()

print("Forecast")

for day, forecast in res.forecast.items():
    print(
        day,
        "-", 
        forecast.weather.text,
        forecast.precipitation.percentage,
        forecast.fahrenheit.highest,
        "/",
        forecast.fahrenheit.lowest
    )

Extra: Async

If you're working with coroutines, such as Discord bots or FastAPI, you can wrap it into async.

(The below code structure is from Stackoverflow.)

import asyncio

from yahoo_search import search


async def asearch(loop, query):
    # None uses the default executor (ThreadPoolExecutor)
    await loop.run_in_executor(
        None, 
        search, 
        query
    )

Models & Functions Definitions

Below are the models & functions type definitions.

See All Models (15)
class AlsoTryItem(BaseModel):
    link: str
    text: str

class PageResult(BaseModel):
    title: str
    link: str
    text: Optional[str] = None

class CardResultSource(BaseModel):
    link: str
    text: str

class CardResult(BaseModel):
    image: Optional[str] = None
    heading: Optional[str] = None
    text: Optional[str] = None
    source: Optional[CardResultSource] = None

class RelatedSearch(BaseModel):
    link: str
    text: str

class SearchResult(BaseModel):
    also_try: List[AlsoTryItem]
    pages: List[PageResult]
    card: Optional[CardResult] = None
    related_searches: List[RelatedSearch]

class News(BaseModel):
    title: str
    thumbnail: Optional[str] = None
    source: Optional[str] = None
    last_updated: Optional[str] = None
    text: Optional[str] = None

class NewsSearchResult(BaseModel):
    news: List[News]

class Video(BaseModel):
    age: Optional[str] = None
    cite: Optional[str] = None
    thumbnail: Optional[str] = None
    video_preview: Optional[str] = None
    title: str
    link: str

class VideoSearchResult(BaseModel):
    videos: List[Video]

class HighLowTemperature(BaseModel):
    highest: int
    lowest: int

class WeatherForecastInner(BaseModel):
    text: str
    icon: str

class Precipitation(BaseModel):
    icon: str
    percentage: str

class WeatherForecast(BaseModel):
    fahrenheit: HighLowTemperature
    celsius: HighLowTemperature
    weather: WeatherForecastInner
    precipitation: Precipitation

class WeatherInformation(BaseModel):
    location: str
    country: str
    time: str
    celsius: int
    fahrenheit: int
    weather: str
    weather_icon: str
    forecast: Dict[
        Literal[
            "Monday", 
            "Tuesday", 
            "Wednesday", 
            "Thursday", 
            "Friday", 
            "Saturday", 
            "Sunday"
        ],
        WeatherForecast
    ]
See All Functions (4)
def search(query: str) -> SearchResult: ...
def search_news(query: str) -> NewsSearchResult: ...
def weather() -> WeatherInformation: ...
def autocomplete(query: str) -> List[str]: ...

No, this time I'm not bored. I just want to practice webscraping.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

yahoo-search-py-0.3.tar.gz (11.4 kB view hashes)

Uploaded Source

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page