Skip to content

ranidspace/nintendo-today-scripts

Repository files navigation

Nintendo Today Scripts

This repo contains a couple scripts I've made to download or convert data from the Nintendo Today mobile app.

Each script has it's own dependencies, however pip install -r requirements.txt gets the dependencies for all of them.

get_feed.py

Downloads all the entries in a feed, such as the "Artworks Archive" or game lore pages.

Usage

python get_feed.py [-b] [-l locale] first_post_id

The locale is in the form en-US (default), many locales are not supported by the app yet.

The -b flag will add all found entries to your account's "Browsing History"

The first_post_id is the id of the first entry in the feed. This script will download all posts afterwards

After running the command it will ask for an access token, please see the section on intercepting phone traffic for guidance.

Requests to the app will often contain an authorization header which begins with Bearer (do not include "Bearer").

It should also be in the response of requests to a url ending in "auth/refresh"

Requires requests, beautifulsoup4 modules, and a system install of ffmpeg (check if running the command by itself works).

nintendical.py

Converts your Calendar in the nintendo app to a set of .ics files, to be imported into a calendar app of your choice. If hosted on a server, the files can be updated and the calendar will update in the app.

Usage

python nintendical.py [-s start_date] [-e end_date] [-l locale]

The start and end date must be in the form YYYY-MM-DD.

If omitted, the start date will be one month from the current day, the end date will be a year from the current date, and the locale will be en-US.

Locale and access token is the same as get_feed

Requires requests, icalendar modules

get_calendar_videos.py

Downloads all the daily videos for all app themes. Will also include the birthday videos for the day of the month your birthday is. The access token is the same as the Nintendical one.

Usage

python get_calendar_videos.py [-l locale]

Locale and access token is the same as get_feed

Requires requests module

get_page.py

Some of the news posts are html files, this will download the html file, along with any css and images linked. This will also upgrade the quality to the "large" format.

Usage

python get_page.py

The web request for the html file on the app includes a cookie header, which begins with __token__=exp=, include the full cookie.

Requires requests, beautifulsoup4 modules.

Download news videos

No script needed, the video files are "master.m3u8" and can be downloaded with ffmpeg:

ffmpeg -headers "cookie: __token__=[add token here]" -i https://[link/to]/master.m3u8 -c copy output.mp4`

The token needed is inside of the header for the web request.

-c copy is optional, if you remove it, ffmpeg will slightly compress and optimize the video.

Intercept phone traffic

Not for Nintendo Today specifically but it is needed to get the links and tokens for all of the scripts.

iOS users can install certificates without root, and you can follow the guide Setting up mitmproxy with iOS. I've not tried it out but others have said it worked for them.

A rooted android device can also install System CA certificates, if you have access to neither, an android Emulator on your computer should work.

I have had luck with Waydroid on Linux and Android Studio on Windows. I have heard others had success with mumuplayer. If you're on android studio, set the AVD to be Pixel 6, API 33 Tiramisu. For any android emulator try to download it without google services.

  1. Install mitmproxy to your computer, and add the System CA certificate to the device

If you install and run mitmproxy, a .mitmproxy should appear in your home directory containing mitmproxy-ca-cert.pem. Adding the certificate is different for every device and emulator.

  1. Install the Nintendo today app

The app comes as a split apk, so you may need something such as an xapk installer, AntiSplit M, or you can install the app directly from Aurora Store (try version 4.2.5 if it crashes on the emulator).

  1. Run mitmweb and connect the device to it

You can connect the device to mitmweb by adding it as a proxy on your phone. Find the local ip address of your computer and the port (8080 by default) and you can use adb shell settings put global http_proxy "[ip of device running proxy]:8080". You can also run mitmweb as a wireguard server, and you can install the wireguard app on the device, and connect to it there.

  1. Confirm you're intercepting web traffic

As you use your device and the app the "Flow List" tab of mitmweb should start to fill with entries. These are the requests, you can click on one and view the request (includes the headers, tokens, cookies) and the response (data received back from the server, such as images)

If you're not receiving data on mitmweb, it's likely you need to configure your connection to the proxy or your computer's firewall. If you are receiving data, but you're unable to use the app or any https websites, it's likely your device doesn't have the certificate.

About

Couple python scripts for getting things from nintendo today

Resources

License

Stars

Watchers

Forks

Languages