diff options
author | Danglewood <85772166+deeleeramone@users.noreply.github.com> | 2024-02-25 00:59:46 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-02-25 08:59:46 +0000 |
commit | eea2fb55b2fd2085dca18a1b84c457feca66f22c (patch) | |
tree | a7dcc7b15b8e93c55e963a280b8f1db2d7e41805 | |
parent | d5cfb57dab162a985ac9b76e4617409fe2a54ddb (diff) |
[BugFix] Fix Company News (#6111)
* fix company news
* update tests
* multiple symbols for polygon
* don't include pageSize in Benzinga querystring, fixed as 100
* remove extra space
* black
* unused imports
* make benzinga test cassette smaller
* missing params
* clear empty strings
---------
Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com>
18 files changed, 47415 insertions, 1981 deletions
diff --git a/openbb_platform/core/openbb_core/provider/standard_models/company_news.py b/openbb_platform/core/openbb_core/provider/standard_models/company_news.py index 60bfaf8890d..cae56e2d081 100644 --- a/openbb_platform/core/openbb_core/provider/standard_models/company_news.py +++ b/openbb_platform/core/openbb_core/provider/standard_models/company_news.py @@ -4,7 +4,7 @@ from datetime import ( date as dateType, datetime, ) -from typing import Optional +from typing import Dict, List, Optional from dateutil.relativedelta import relativedelta from pydantic import Field, NonNegativeInt, field_validator @@ -20,26 +20,26 @@ from openbb_core.provider.utils.descriptions import ( class CompanyNewsQueryParams(QueryParams): """Company news Query.""" - symbol: str = Field( - min_length=1, + symbol: Optional[str] = Field( + default=None, description=QUERY_DESCRIPTIONS.get("symbol", "") + " This endpoint will accept multiple symbols separated by commas.", ) - limit: Optional[NonNegativeInt] = Field( - default=20, description=QUERY_DESCRIPTIONS.get("limit", "") - ) start_date: Optional[dateType] = Field( default=None, description=QUERY_DESCRIPTIONS.get("start_date", "") ) end_date: Optional[dateType] = Field( default=None, description=QUERY_DESCRIPTIONS.get("end_date", "") ) + limit: Optional[NonNegativeInt] = Field( + default=2500, description=QUERY_DESCRIPTIONS.get("limit", "") + ) @field_validator("symbol", mode="before") @classmethod - def symbols_validate(cls, v: str) -> str: # pylint: disable=E0213 + def symbols_validate(cls, v): """Validate the symbols.""" - return v.upper() + return v.upper() if v else None @field_validator("start_date", mode="before") @classmethod @@ -47,7 +47,7 @@ class CompanyNewsQueryParams(QueryParams): """Populate start date if empty.""" if not v: now = datetime.now().date() - v = now - relativedelta(years=1) + v = now - relativedelta(weeks=16) return v @field_validator("end_date", mode="before") @@ -62,16 +62,16 @@ class CompanyNewsQueryParams(QueryParams): class CompanyNewsData(Data): """Company News Data.""" - symbols: str = Field( - min_length=1, - description=DATA_DESCRIPTIONS.get("symbols", "") - + " Here it is a separated list of symbols.", - ) date: datetime = Field( description=DATA_DESCRIPTIONS.get("date", "") - + " Here it is the date of the news." + + " Here it is the published date of the article." + ) + title: str = Field(description="Title of the article.") + text: Optional[str] = Field(default=None, description="Text/body of the article.") + images: Optional[List[Dict[str, str]]] = Field( + default=None, description="Images associated with the article." + ) + url: str = Field(description="URL to the article.") + symbols: Optional[str] = Field( + default=None, description="Symbols associated with the article." ) - title: str = Field(description="Title of the news.") - image: Optional[str] = Field(default=None, description="Image URL of the news.") - text: Optional[str] = Field(default=None, description="Text/body of the news.") - url: str = Field(description="URL of the news.") diff --git a/openbb_platform/extensions/news/integration/test_news_api.py b/openbb_platform/extensions/news/integration/test_news_api.py index 279eb1cd985..2b685a34857 100644 --- a/openbb_platform/extensions/news/integration/test_news_api.py +++ b/openbb_platform/extensions/news/integration/test_news_api.py @@ -128,13 +128,12 @@ def test_news_world(params, headers): ), ( { - "published_utc": "2023-01-01", "order": "desc", "provider": "polygon", "symbol": "AAPL", "limit": 20, - "start_date": None, - "end_date": None, + "start_date": "2024-01-10", + "end_date": "2024-01-10", } ), ( @@ -173,6 +172,7 @@ def test_news_world(params, headers): "source": "bloomberg.com", "start_date": None, "end_date": None, + "offset": None, } ), ( diff --git a/openbb_platform/extensions/news/integration/test_news_python.py b/openbb_platform/extensions/news/integration/test_news_python.py index 9c96b8d5a08..38bbbbfded1 100644 --- a/openbb_platform/extensions/news/integration/test_news_python.py +++ b/openbb_platform/extensions/news/integration/test_news_python.py @@ -113,13 +113,12 @@ def test_news_world(params, obb): ), ( { - "published_utc": "2024-01-10", "order": "desc", "provider": "polygon", "symbol": "AAPL", "limit": 20, - "start_date": None, - "end_date": None, + "start_date": "2024-01-10", + "end_date": "2024-01-10", } ), ( @@ -158,6 +157,7 @@ def test_news_world(params, obb): "source": "bloomberg.com", "start_date": None, "end_date": None, + "offset": None, } ), ( diff --git a/openbb_platform/providers/benzinga/openbb_benzinga/models/company_news.py b/openbb_platform/providers/benzinga/openbb_benzinga/models/company_news.py index 3b36a061a0a..eb7723da3dd 100644 --- a/openbb_platform/providers/benzinga/openbb_benzinga/models/company_news.py +++ b/openbb_platform/providers/benzinga/openbb_benzinga/models/company_news.py @@ -153,12 +153,14 @@ class BenzingaCompanyNewsFetcher( base_url = "https://api.benzinga.com/api/v2/news" query.sort = f"{query.sort}:{query.order}" if query.sort and query.order else "" - querystring = get_querystring(query.model_dump(by_alias=True), ["order"]) + querystring = get_querystring( + query.model_dump(by_alias=True), ["order", "pageSize"] + ) pages = math.ceil(query.limit / 100) if query.limit else 1 - + page_size = 100 if query.limit and query.limit > 100 else query.limit urls = [ - f"{base_url}?{querystring}&page={page}&token={token}" + f"{base_url}?{querystring}&page={page}&pageSize={page_size}&token={token}" for page in range(pages) ] diff --git a/openbb_platform/providers/benzinga/tests/record/http/test_benzinga_fetchers/test_benzinga_company_news_fetcher.yaml b/openbb_platform/providers/benzinga/tests/record/http/test_benzinga_fetchers/test_benzinga_company_news_fetcher.yaml index 11ef84fa2a7..79b0acb6016 100644 --- a/openbb_platform/providers/benzinga/tests/record/http/test_benzinga_fetchers/test_benzinga_company_news_fetcher.yaml +++ b/openbb_platform/providers/benzinga/tests/record/http/test_benzinga_fetchers/test_benzinga_company_news_fetcher.yaml @@ -2,916 +2,655 @@ interactions: - request: body: null headers: + Accept: + - application/json Accept-Encoding: - gzip, deflate Connection: - keep-alive - accept: - - application/json method: GET uri: https://api.benzinga.com/api/v2/news?displayOutput=full&page=0&pageSize=20&sort=created%3Adesc&tickers=AAPL%2CMSFT&token=MOCK_TOKEN response: body: - string: "[{\"id\":34920696,\"author\":\"Benzinga Insights\",\"created\":\"Tue, - 26 Sep 2023 13:35:17 -0400\",\"updated\":\"Tue, 26 Sep 2023 13:35:18 -0400\",\"title\":\"10 - Information Technology Stocks With Whale Alerts In Today's Session\",\"teaser\":\" - \",\"body\":\"<p>This whale alert can help traders discover the next big trading - opportunities.</p>\\n<p>Whales are entities with large sums of money and we - track their transactions here at Benzinga on our options activity scanner.</p>\\n<p>Traders - will search for circumstances when the market estimation of an option diverges - heavily from its normal worth. High amounts of trading activity could push - option prices to exaggerated or underestimated levels. </p>\\n<p>Below are - some instances of options activity happening in the Information Technology - sector: <table>\\n<thead>\\n<tr>\\n<th><strong>Symbol</strong></th>\\n<th><strong>PUT/CALL</strong></th>\\n<th><strong>Trade - Type</strong></th>\\n<th><strong>Sentiment</strong></th>\\n<th><strong>Exp. - Date</strong></th>\\n<th><strong>Strike Price</strong></th>\\n<th><strong>Total - Trade Price</strong></th>\\n<th><strong>Open Interest</strong></th>\\n<th><strong>Volume</strong></th>\\n</tr>\\n</thead>\\n<tbody>\\n<tr>\\n<td>AAPL</td>\\n<td>PUT</td>\\n<td>SWEEP</td>\\n<td>BEARISH</td>\\n<td>09/29/23</td>\\n<td>$172.50</td>\\n<td>$42.7K</td>\\n<td>19.8K</td>\\n<td>73.0K</td>\\n</tr>\\n<tr>\\n<td>NVDA</td>\\n<td>CALL</td>\\n<td>SWEEP</td>\\n<td>BEARISH</td>\\n<td>09/29/23</td>\\n<td>$430.00</td>\\n<td>$39.0K</td>\\n<td>9.3K</td>\\n<td>35.2K</td>\\n</tr>\\n<tr>\\n<td>MSFT</td>\\n<td>CALL</td>\\n<td>SWEEP</td>\\n<td>BULLISH</td>\\n<td>09/29/23</td>\\n<td>$315.00</td>\\n<td>$26.9K</td>\\n<td>1.3K</td>\\n<td>14.2K</td>\\n</tr>\\n<tr>\\n<td>U</td>\\n<td>CALL</td>\\n<td>SWEEP</td>\\n<td>BULLISH</td>\\n<td>09/29/23</td>\\n<td>$31.00</td>\\n<td>$70.9K</td>\\n<td>197</td>\\n<td>2.3K</td>\\n</tr>\\n<tr>\\n<td>NET</td>\\n<td>PUT</td>\\n<td>SWEEP</td>\\n<td>BEARISH</td>\\n<td>10/06/23</td>\\n<td>$56.00</td>\\n<td>$34.6K</td>\\n<td>353</td>\\n<td>2.2K</td>\\n</tr>\\n<tr>\\n<td>ORCL</td>\\n<td>CALL</td>\\n<td>SWEEP</td>\\n<td>BULLISH</td>\\n<td>12/15/23</td>\\n<td>$105.00</td>\\n<td>$25.2K</td>\\n<td>1.4K</td>\\n<td>647</td>\\n</tr>\\n<tr>\\n<td>DBX</td>\\n<td>CALL</td>\\n<td>SWEEP</td>\\n<td>BEARISH</td>\\n<td>06/21/24</td>\\n<td>$30.00</td>\\n<td>$71.5K</td>\\n<td>8.5K</td>\\n<td>420</td>\\n</tr>\\n<tr>\\n<td>AMD</td>\\n<td>CALL</td>\\n<td>SWEEP</td>\\n<td>BEARISH</td>\\n<td>06/21/24</td>\\n<td>$110.00</td>\\n<td>$280.2K</td>\\n<td>5.6K</td>\\n<td>282</td>\\n</tr>\\n<tr>\\n<td>MU</td>\\n<td>PUT</td>\\n<td>TRADE</td>\\n<td>BEARISH</td>\\n<td>12/15/23</td>\\n<td>$70.00</td>\\n<td>$52.4K</td>\\n<td>3.8K</td>\\n<td>144</td>\\n</tr>\\n<tr>\\n<td>NOW</td>\\n<td>PUT</td>\\n<td>SWEEP</td>\\n<td>BULLISH</td>\\n<td>05/17/24</td>\\n<td>$510.00</td>\\n<td>$211.7K</td>\\n<td>2</td>\\n<td>117</td>\\n</tr>\\n</tbody>\\n</table></p>\\n<h2>Explanation</h2>\\n<p>These - bullet-by-bullet explanations have been constructed using the accompanying - table. </p>\\n<p>\u2022 For <strong>AAPL</strong> (NASDAQ:<a class=\\\"ticker\\\" - href=\\\"https://www.benzinga.com/stock/AAPL#NASDAQ\\\">AAPL</a>), we notice - a <strong>put</strong> option <strong>sweep</strong> that happens to be <strong>bearish</strong>, - expiring in 3 day(s) on <strong>September 29, 2023</strong>. This event was - a transfer of <strong>285</strong> contract(s) at a <strong>$172.50</strong> - strike. This particular put needed to be split into 5 different trades to - become filled. The total cost received by the writing party (or parties) was - <strong>$42.7K</strong>, with a price of <strong>$150.0</strong> per contract. - There were <strong>19834</strong> open contracts at this strike prior to today, - and today <strong>73042</strong> contract(s) were bought and sold. </p>\\n<p>\u2022 - \ Regarding <strong>NVDA</strong> (NASDAQ:<a class=\\\"ticker\\\" href=\\\"https://www.benzinga.com/stock/NVDA#NASDAQ\\\">NVDA</a>), - we observe a <strong>call</strong> option <strong>sweep</strong> with <strong>bearish</strong> - sentiment. It expires in 3 day(s) on <strong>September 29, 2023</strong>. - Parties traded <strong>100</strong> contract(s) at a <strong>$430.00</strong> - strike. This particular call needed to be split into 7 different trades to - become filled. The total cost received by the writing party (or parties) was - <strong>$39.0K</strong>, with a price of <strong>$390.0</strong> per contract. - There were <strong>9322</strong> open contracts at this strike prior to today, - and today <strong>35219</strong> contract(s) were bought and sold. </p>\\n<p>\u2022 - \ For <strong>MSFT</strong> (NASDAQ:<a class=\\\"ticker\\\" href=\\\"https://www.benzinga.com/stock/MSFT#NASDAQ\\\">MSFT</a>), - we notice a <strong>call</strong> option <strong>sweep</strong> that happens - to be <strong>bullish</strong>, expiring in 3 day(s) on <strong>September - 29, 2023</strong>. This event was a transfer of <strong>116</strong> contract(s) - at a <strong>$315.00</strong> strike. This particular call needed to be split - into 8 different trades to become filled. The total cost received by the writing - party (or parties) was <strong>$26.9K</strong>, with a price of <strong>$232.0</strong> - per contract. There were <strong>1343</strong> open contracts at this strike - prior to today, and today <strong>14289</strong> contract(s) were bought and - sold. </p>\\n<p>\u2022 For <strong>U</strong> (NYSE:<a class=\\\"ticker\\\" - href=\\\"https://www.benzinga.com/stock/U#NYSE\\\">U</a>), we notice a <strong>call</strong> - option <strong>sweep</strong> that happens to be <strong>bullish</strong>, - expiring in 3 day(s) on <strong>September 29, 2023</strong>. This event was - a transfer of <strong>1365</strong> contract(s) at a <strong>$31.00</strong> - strike. This particular call needed to be split into 24 different trades to - become filled. The total cost received by the writing party (or parties) was - <strong>$70.9K</strong>, with a price of <strong>$52.0</strong> per contract. - There were <strong>197</strong> open contracts at this strike prior to today, - and today <strong>2365</strong> contract(s) were bought and sold. </p>\\n<p>\u2022 - \ Regarding <strong>NET</strong> (NYSE:<a class=\\\"ticker\\\" href=\\\"https://www.benzinga.com/stock/NET#NYSE\\\">NET</a>), - we observe a <strong>put</strong> option <strong>sweep</strong> with <strong>bearish</strong> - sentiment. It expires in 10 day(s) on <strong>October 6, 2023</strong>. Parties - traded <strong>200</strong> contract(s) at a <strong>$56.00</strong> strike. - This particular put needed to be split into 11 different trades to become - filled. The total cost received by the writing party (or parties) was <strong>$34.6K</strong>, - with a price of <strong>$173.0</strong> per contract. There were <strong>353</strong> - open contracts at this strike prior to today, and today <strong>2259</strong> - contract(s) were bought and sold. </p>\\n<p>\u2022 For <strong>ORCL</strong> - (NYSE:<a class=\\\"ticker\\\" href=\\\"https://www.benzinga.com/stock/ORCL#NYSE\\\">ORCL</a>), - we notice a <strong>call</strong> option <strong>sweep</strong> that happens - to be <strong>bullish</strong>, expiring in 80 day(s) on <strong>December - 15, 2023</strong>. This event was a transfer of <strong>40</strong> contract(s) - at a <strong>$105.00</strong> strike. This particular call needed to be split - into 6 different trades to become filled. The total cost received by the writing - party (or parties) was <strong>$25.2K</strong>, with a price of <strong>$630.0</strong> - per contract. There were <strong>1461</strong> open contracts at this strike - prior to today, and today <strong>647</strong> contract(s) were bought and - sold. </p>\\n<p>\u2022 Regarding <strong>DBX</strong> (NASDAQ:<a class=\\\"ticker\\\" - href=\\\"https://www.benzinga.com/stock/DBX#NASDAQ\\\">DBX</a>), we observe - a <strong>call</strong> option <strong>sweep</strong> with <strong>bearish</strong> - sentiment. It expires in 269 day(s) on <strong>June 21, 2024</strong>. Parties - traded <strong>368</strong> contract(s) at a <strong>$30.00</strong> strike. - This particular call needed to be split into 19 different trades to become - filled. The total cost received by the writing party (or parties) was <strong>$71.5K</strong>, - with a price of <strong>$195.0</strong> per contract. There were <strong>8592</strong> - open contracts at this strike prior to today, and today <strong>420</strong> - contract(s) were bought and sold. </p>\\n<p>\u2022 For <strong>AMD</strong> - (NASDAQ:<a class=\\\"ticker\\\" href=\\\"https://www.benzinga.com/stock/AMD#NASDAQ\\\">AMD</a>), - we notice a <strong>call</strong> option <strong>sweep</strong> that happens - to be <strong>bearish</strong>, expiring in 269 day(s) on <strong>June 21, - 2024</strong>. This event was a transfer of <strong>250</strong> contract(s) - at a <strong>$110.00</strong> strike. This particular call needed to be split - into 5 different trades to become filled. The total cost received by the writing - party (or parties) was <strong>$280.2K</strong>, with a price of <strong>$1125.0</strong> - per contract. There were <strong>5666</strong> open contracts at this strike - prior to today, and today <strong>282</strong> contract(s) were bought and - sold. </p>\\n<p>\u2022 Regarding <strong>MU</strong> (NASDAQ:<a class=\\\"ticker\\\" - href=\\\"https://www.benzinga.com/stock/MU#NASDAQ\\\">MU</a>), we observe - a <strong>put</strong> option <strong>trade</strong> with <strong>bearish</strong> - sentiment. It expires in 80 day(s) on <strong>December 15, 2023</strong>. - Parties traded <strong>99</strong> contract(s) at a <strong>$70.00</strong> - strike. The total cost received by the writing party (or parties) was <strong>$52.4K</strong>, - with a price of <strong>$530.0</strong> per contract. There were <strong>3888</strong> - open contracts at this strike prior to today, and today <strong>144</strong> - contract(s) were bought and sold. </p>\\n<p>\u2022 Regarding <strong>NOW</strong> - (NYSE:<a class=\\\"ticker\\\" href=\\\"https://www.benzinga.com/stock/NOW#NYSE\\\">NOW</a>), - we observe a <strong>put</strong> option <strong>sweep</strong> with <strong>bullish</strong> - sentiment. It expires in 234 day(s) on <strong>May 17, 2024</strong>. Parties - traded <strong>52</strong> contract(s) at a <strong>$510.00</strong> strike. - This particular put needed to be split into 13 different trades to become - filled. The total cost received by the writing party (or parties) was <strong>$211.7K</strong>, - with a price of <strong>$4073.0</strong> per contract. There were <strong>2</strong> - open contracts at this strike prior to today, and today <strong>117</strong> - contract(s) were bought and sold. </p>\\n<p><strong>Options Alert Terminology</strong><br - />\\n - <strong>Call Contracts:</strong> The right to buy shares as indicated - in the contract.<br />\\n - <strong>Put Contracts:</strong> The right to sell - shares as indicated in the contract.<br />\\n - <strong>Expiration Date:</strong> - When the contract expires. One must act on the contract by this date if one - wants to use it.<br />\\n - <strong>Premium/Option Price:</strong> The price - of the contract. </p>\\n<p>For more information, visit our <em><a href=\\\"https://pro.benzinga.com/blog/how-to-understand-option-alerts/\\\">Guide - to Understanding Options Alerts</a></em> or read <a href=\\\"https://www.benzinga.com/markets/options\\\">more - about unusual options activity</a>. </p>\\n<p>This article was generated - by Benzinga's automated content engine and reviewed by an editor.</p>\",\"url\":\"https://www.benzinga.com/markets/options/23/09/34920696/10-information-technology-stocks-with-whale-alerts-in-todays-session\",\"image\":[{\"size\":\"large\",\"url\":\"https://cdn.benzinga.com/files/imagecache/2048x1536xUP/images/story/2023/options_image_2.jpeg\"},{\"size\":\"thumb\",\"url\":\"https://cdn.benzinga.com/files/imagecache/250x187xUP/images/story/2023/options_image_2.jpeg\"},{\"size\":\"small\",\"url\":\"https://cdn.benzinga.com/files/imagecache/1024x768xUP/images/story/2023/options_image_2.jpeg\"}],\"channels\":[{\"name\":\"Options\"}],\"stocks\":[{\"name\":\"AAPL\"},{\"name\":\"AMD\"},{\"name\":\"DBX\"},{\"name\":\"MSFT\"},{\"name\":\"MU\"},{\"name\":\"NET\"},{\"name\":\"NOW\"},{\"name\":\"NVDA\"},{\"name\":\"ORCL\"},{\"name\":\"U\"}],\"tags\":[{\"name\":\"BZI-AUOA\"}]},{\"id\":34914178,\"author\":\"Anusuya - Lahiri\",\"created\":\"Tue, 26 Sep 2023 13:24:43 -0400\",\"updated\":\"Tue, - 26 Sep 2023 13:24:44 -0400\",\"title\":\"Google Podcasts To Sunset in 2024, - YouTube Music Rises As Podcasting Hub\",\"teaser\":\"Alphabet Inc\_(NASDAQ: - GOOG) (NASDAQ: GOOGL)\_Google\_has disclosed its plans to shut down the Google - Podcasts app later in 2024, redirecting its users to the YouTube Music platform.\_\",\"body\":\"<p><strong>Alphabet - Inc</strong> (NASDAQ:<a class=\\\"ticker\\\" href=\\\"https://www.benzinga.com/stock/GOOG#NASDAQ\\\">GOOG</a>) - (NASDAQ:<a class=\\\"ticker\\\" href=\\\"https://www.benzinga.com/stock/GOOGL#NASDAQ\\\">GOOGL</a>) <strong>Google</strong> has - disclosed its plans to shut down the Google Podcasts app later in 2024, redirecting - its users to the YouTube Music platform. </p>\\r\\n\\r\\n<p>This move - is part of Google's strategy to consolidate its podcast offerings and - enhance the podcast experience on YouTube Music by focusing on discovery, - community, and seamless switching between audio and video podcasts.</p>\\r\\n\\r\\n<p><strong><em>Also - Read: </em></strong><a class=\\\"editor-rtfLink\\\" href=\\\"https://www.benzinga.com/news/23/07/33093135/spotify-expands-video-offering-takes-on-youtube-and-tiktok-with-full-length-music-videos-report\\\" - style=\\\"color:#4a6ee0; background:transparent; margin-top:0pt; margin-bottom:0pt\\\" - target=\\\"_blank\\\"><em>Spotify Expands Video Offering, Takes On YouTube - And TikTok With Full-Length Music Videos: Report</em></a></p>\\r\\n\\r\\n<p>Google's - decision is motivated by user behavior, with only 4% of weekly podcast users - in the U.S. favoring Google Podcasts, compared to 23% who frequently use YouTube - for podcasts, TechCrunch <a class=\\\"editor-rtfLink\\\" href=\\\"https://techcrunch.com/2023/09/26/google-podcasts-to-shut-down-in-2024-with-listeners-migrated-to-youtube-music/\\\" - style=\\\"color:#4a6ee0; background:transparent; margin-top:0pt; margin-bottom:0pt\\\" - target=\\\"_blank\\\">reports</a>.</p>\\r\\n\\r\\n<p>Meanwhile,<strong> Spotify - Technology</strong> (NYSE:<a class=\\\"ticker\\\" href=\\\"https://www.benzinga.com/stock/SPOT#NYSE\\\">SPOT</a>) - has <a class=\\\"editor-rtfLink\\\" href=\\\"https://www.benzinga.com/news/23/09/34886447/elon-musk-wows-spotifys-latest-podcast-translation-feature-developed-with-openais-help\\\" - style=\\\"color:#4a6ee0; background:transparent; margin-top:0pt; margin-bottom:0pt\\\" - target=\\\"_blank\\\">initiated a trial phase</a> for an AI-powered feature - to translate and replicate podcast hosts' voices into multiple languages. </p>\\r\\n\\r\\n<p>It - looks to provide a seamless listening experience in Spanish, French, and German - by recreating the original speakers' tone, rhythm, and pace.</p>\\r\\n\\r\\n<p>To - facilitate the transition, Google will provide users with a migration tool, - enabling them to transfer their podcast subscriptions to YouTube Music. </p>\\r\\n\\r\\n<p>Additionally, - Google will support the option to download an OPML file of their show subscriptions - from Google Podcasts, allowing users to import their subscriptions to other - podcast apps if they prefer not to move to YouTube Music. </p>\\r\\n\\r\\n<p>Google - aims to position YouTube Music as a strong competitor to platforms like Spotify, <strong>Apple - Inc</strong> (NASDAQ:<a class=\\\"ticker\\\" href=\\\"https://www.benzinga.com/stock/AAPL#NASDAQ\\\">AAPL</a>) - Apple Music, and <strong>Amazon.Com Inc</strong> (NASDAQ:<a class=\\\"ticker\\\" - href=\\\"https://www.benzinga.com/stock/AMZN#NASDAQ\\\">AMZN</a>) Amazon Music. </p>\\r\\n\\r\\n<p>While - Google has successfully shifted users away from older products in the past, - transitioning podcast users presents a unique challenge, as many already turn - to YouTube for podcast content.</p>\\r\\n\\r\\n<p><strong>Price Action:</strong> GOOG - shares traded lower by 2.12% at $129.37 on the last check Tuesday.</p>\\r\\n\\r\\n<p><strong><em>Disclaimer:</em></strong><em> This - content was partially produced with the help of AI tools and was reviewed - and published by Benzinga editors.</em></p>\\r\\n \",\"url\":\"https://www.benzinga.com/news/23/09/3491417 |