2023-07-27 21:05:49 +00:00
|
|
|
# Search
|
|
|
|
|
|
|
|
## Files
|
|
|
|
|
|
|
|
what is it | query | file
|
|
|
|
---|---|---
|
2023-07-27 22:20:51 +00:00
|
|
|
general search response | `psychonaut 4` | [general-result.json](general-result.json)
|
2023-07-27 21:05:49 +00:00
|
|
|
|
|
|
|
## A general search yields
|
|
|
|
|
|
|
|
- **Top Result**
|
|
|
|
- The top Artist
|
|
|
|
- The most popular songs of said artist
|
|
|
|
- **Songs** (3) excluding the top songs
|
|
|
|
- Videos (3)
|
|
|
|
- **Albums** (3)
|
|
|
|
- Community playlists (3)
|
|
|
|
- **Artists** (3) excluding the top artist
|
|
|
|
- if you search for a artist, it might return simmilar artists in style, not in name
|
|
|
|
|
|
|
|
### Different Renderers
|
|
|
|
|
|
|
|
#### `runs`
|
|
|
|
|
|
|
|
This should be pretty consistently all over the response be parsebal to a list of Music Elements.
|
|
|
|
|
|
|
|
`runs` usually is a list. If a element of the list has the key `navigationEndpoint`, it represents a music elements in a following manner:
|
|
|
|
|
|
|
|
- `text` the name
|
|
|
|
- `navigationEndpoint` -> `browseEndpoint`
|
|
|
|
- `browseId` the id of the artist/song/album...
|
|
|
|
- `browseEndpointContextSupportedConfigs` -> `browseEndpointContextMusicConfig` -> `pageType` the type of the header like element
|
|
|
|
|
|
|
|
#### musicCardShelfRenderer
|
|
|
|
|
|
|
|
Used by e.g. the `Top Results`.
|
|
|
|
|
|
|
|
Contains:
|
|
|
|
|
|
|
|
- One Main-Element (a header like music object) | consists of these keys:
|
|
|
|
- `thumbnail` the image of the header
|
|
|
|
- `title` -> `runs`
|
|
|
|
- for details look [here](#runs).
|
|
|
|
|
|
|
|
|
|
|
|
### Details
|
|
|
|
|
|
|
|
You can get the contents (a list of [renderers](#musiccardshelfrenderer)) this way:
|
|
|
|
|
|
|
|
```python
|
|
|
|
data = r.json().get("contents", {}).get("tabbedSearchResultsRenderer", {}).get("tabs", [{}])[0].get("tabRenderer").get("content", {}).get("sectionListRenderer", {}).get("contents", [])
|
|
|
|
```
|
|
|
|
|
|
|
|
Then the list contains following items, in following order:
|
|
|
|
|
|
|
|
1. _About these results_ (an infobutton)
|
|
|
|
2. The **Top result**
|
|
|
|
3. The **Songs** [_musicShelfRenderer_]
|
|
|
|
4. ...
|