PSHigh5
is a macOS Swift 5 script that continuously checks for PlayStation 5 stock
on Sony's website and alerts the user with sound and a bouncing Terminal.app
Dock icon
when either the store queue or product stock is detected.
╰─ swift sh PSHigh5.swift
[3/3] Linking PSHigh5
[LOG] 4:52:54 PM EST: Began loading product page.
[LOG] 4:52:55 PM EST: Finished loading product page.
[LOG] 4:52:55 PM EST: PS5 is sold out. 😡 Trying again...
[LOG] 4:53:01 PM EST: Began loading product page.
[LOG] 4:52:02 PM EST: Finished loading product page.
[LOG] 4:52:02 PM EST: PS5 is sold out. 😡 Trying again...
...
[LOG] 5:51:32 PM EST: PS5 is in stock! 🥳🙏
Often, relying on external services to notify you of PlayStation 5 stock has a non-
trivial delay associated with it, which basically results in no chance of getting a
(pre-)order. Running PSHigh5
locally on your system ensures that you'll know the
instant PlayStation Direct has been updated so you can try to get in the queue (or
add a PS5 to your cart).
-
macOS:
PSHigh5
is a macOS-only script as it relies on AppKit to create a browser it can read. While Swift itself is available for multiple platforms, AppKit is only available on macOS.swift-sh
doesn't appear to work with macOS 11 (Big Sur) yet, so this script won't run on that version of macOS yet. -
Xcode: Executing Swift scripts requires the
swift
shell command, which is available after installing Xcode. -
Homebrew:
swift-sh
, which packages Swift shell script dependencies and creates an ad-hoc execution package, is installed using Homebrew. -
swift-sh
:brew install swift-sh
-
Be near your computer: Obviously, you must be at or near your computer while this script is running, as it does not (yet?) offer any remote notification capability to otherwise inform you that it detects a store queue or product stock.
-
Ensure you're running on a recent version of macOS, have Xcode installed, have Homebrew installed, and have the
swift-sh
brew installed. -
Run the script:
swift sh PSHigh5.swift
⚠️ If you decide to copy or movePSHigh5.swift
to some other directory before executing it, you must also copy the.sounds
folder along with it, or none of the alert sounds will play. The scripts expects.sounds
to exist at the same root asPSHigh5.swift
. -
If
Terminal.app
bounces and shows a badge, you need to complete a CAPTCHA challenge. -
If you hear an alert fanfare (YouTube), then that means the script was able to determine that PlayStation Direct page is showing the entry queue. Load the product page in your browser and complete the CAPTCHA challenge to enter the queue!
-
If you hear a victory fanfare (YouTube), then that means the script was able to determine that the "Add to Cart" button is visible on the PlayStation 5 product page.
These steps only need to be performed one time. After that, you just need to follow the "Running the Script" steps below whenever you want to use it.
-
Download
PSHigh5
At the top of this GitHub repository (
cifilter/PSHigh5
), click Code, then Download ZIP.Once the ZIP file is download, extract it anywhere.
-
Install Xcode
To install Xcode, you either need an Apple Developer account to download Xcode manually, or just install it via the Mac App Store (recommended).
Once Xcode is installed, launch it. Xcode is located at
/Applications/Xcode.app
, but using Spotlight is the fastest way to launch any app:⌘ + Space, start typing 'xcode', and press Enter when
Xcode.app
is selected.Xcode should prompt you to enter your macOS user account password so it can install some things. Enter your password.
After Xcode finishes installing everything, it should show its splash screen. Quit Xcode (⌘ + Q) at this point.
-
Open
Terminal.app
Terminal.app
is located at/Applications/Utilities/Terminal.app
, but it can also be launched fastest using Spotlight as shown in the previous step. -
Install Homebrew
Copy and paste the following string from
brew.sh
toTerminal.app
, then press Enter:/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
Follow any prompts from Homebrew, and wait for it to finish installing. You should see the terminal prompt again.
bash-3.2$ █
-
Install
swift-sh
Still in
Terminal.app
, enter the following command, and press Enter:brew install swift-sh
Wait for Homebrew to install
swift-sh
.With all those steps completed, the script can be executed any time using the next set of instructions.
-
Open
Terminal.app
Terminal.app
is located at/Applications/Utilities/Terminal.app
, but it can also be launched fastest using Spotlight. -
Move to the Script Directory
Terminal.app
needs toc
hanged
irectories (cd
) to the directory (AKA folder) wherePSHigh5
is.The easiest way to do this is to first type
cd
, followed by a space (press Spacebar). Then drag the folder you extracted from the ZIP file downloaded above, and drop it on top ofTerminal.app
.The terminal should read something like this:
bash-3.2$ cd /Users/{your user name}/Downloads/PSHigh5-main█
Press Enter to change to that directory.
-
Run
PSHigh5
In the
PSHigh5
directory, enter the following command, then press Enter:swift sh PSHigh5.swift
The first time this script is executed, it will download and set up some dependencies. Once that finishes,
PSHigh5
will then begin executing infinitely, until any of the following events:- An error occurs
- The PlayStation Direct queue is detected
- A PlayStation 5 console is available to puchase on the product page!
- The script is explicitly terminated by pressing Ctrl + C
- The browser window is closed
-
Understand How the Script Works
Each time the script runs, it will check one of the PlayStation 5 product pages—toggling between the disc and console pages each run—and perform the following steps:
- Checks that the product page rendered correctly in the web browser
- Parses the page HTML
- If the HTML indicates that a page CAPTCHA associated with the store queue is visible, an alert sound will play, the product page URL will be displayed, and the script will exit
- If the HTML indicates that some other CAPTCHA is displayed—perhaps just a rate- limiting CAPTCHA that the store page uses—then the script will attempt to subvert it by immediately reloading up to 3 times
- If the CAPTCHA cannot be bypassed, then a console prompt is emitted, and the script will wait for the user to solve the CAPTCHA, then press Enter in the console to continue exection
- If either the CAPTCHA can be bypassed, or if it cannot be bypassed but the user successfully completes it, then the script will continue looping
- If the product info page itself is loaded, and if it detects the "Add to Cart" button for the "hero product" (i.e., the PS5), a fanfare sound will play, the product page URL will be displayed, and the script will exit
- Otherwise, the script will know that the product is out of stock, and it will attempt to check again
A browser window will pop up when the script executes. This is not strictly necessary for the script to run, but in the event that a CAPTCHA challenge appears that cannot be bypassed by reloading, then the script has no choice but to wait for user input to complete the challenge before proceeding.
You can always terminate the script by pressing Ctrl + C in
Terminal.app
, or by quittingTerminal.app
altogether (⌘ + Q). Otherwise, it will continue to execute infinitely until a termination event occurs. Alternately, you can close the browser window that the script creates, and the script will terminate. -
Making Changes to the Script
At the moment, the script has no launch options or configurations you can play with. If you want to try and alter its behavior, you can open and edit
PSHigh5.swift
directly in the editor of your choice—though Xcode is the norm for Swift.The code is thoroughly commented and well-organized, so even if you don't have a clue about Swift or programming in general, you should be able to make some changes here and there based on the comments. Save any changes, and re-run the script.
This updates the HTML string the script checks for to detect the queue.
This release changes the core script logic to create a completely new web view for each page load. This should prevent any cached page data, cookies, etc. from affecting subsequent page requests.
- Fixes CAPTCHA detection
- Re-runs script asynchronously to free main thread
- Runs locally on your system as a shell script
- Only checks PlayStation Direct product URLs
- Alternates between checking the disc and digital version product pages
- Logs as much information to the console as is useful
- Plays sounds for events that the user should respond to: store queue is up, or the product itself is available to add to your cart
I'm on various parts of the Internet under the name CIFilter
/cifilter
most of the times.
I use Twitter sometimes, but I'm a lowly non-Blue Checkmark. Nevertheless, that's a decent way to contact me if you want.
If you're an iOS developer, I'm pretty active on the big iOS developers Slack community.
Use GitHub Issues to file feature requests and bugs. I'll do my best to consider everything, but this is just something I'm working on for fun, not my job. 😃 Please be considerate of that to temper your expectations!
I'm just a guy who does stuff with computers for a living. I'm sure this script could be
improved in a trillion ways to make it infinitely more useful. I'll try to continue
adding features to it, but I also welcome pull requests! Please fork this repo and make
improvements you think should be merged back into main
.
PSHigh5
is licensed using the Creative Commons Zero v1.0
Universal license. See
LICENSE
for the full license.
Basically, you can do whatever you want with this script, but I'm not responsible for
anything that may or may not happen as a result of using PSHigh5
.