Skip to content

Instantly share code, notes, and snippets.

@Luro02
Last active April 17, 2021 10:18
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Luro02/a1fe443ca17fdc8cf40413beffa14be9 to your computer and use it in GitHub Desktop.
Save Luro02/a1fe443ca17fdc8cf40413beffa14be9 to your computer and use it in GitHub Desktop.
Have fun with it :), v1.0 ; works fine for me at least....
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# psdle.py -- does the same thing as PSDLE does...
# Copyright (C) 2018 Gnarmagon
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
import os
import sys
import json
from PyQt5 import QtCore, QtWidgets, QtWebEngineWidgets, QtWebEngineCore
ua_windows = ('Mozilla/5.0 (Windows NT 10.0; WOW64; rv:57.0) '
'Gecko/20100101 Firefox/57.0')
class BrowserReqIntercept(QtWebEngineCore.QWebEngineUrlRequestInterceptor):
tokenS = QtCore.pyqtSignal(str)
def __init__(self, parent=None):
super().__init__(parent)
self.page = parent
def convertRederictUrl(self, url):
try:
return url[57:].split('#')[1].split('&')
except IndexError:
return None
def interceptRequest(self, info):
target = info.requestUrl()
self.urlLnk = target.url()
if self.urlLnk[:57] == "https://store.playstation.com/html/webIframeRedirect.html":
if self.convertRederictUrl(self.urlLnk) is not None:
token = self.urlLnk[57:].split('#')[1].split('&')[0].split('=')[1]
self.tokenS.emit(token)
print("[DEBUG] Bearer Token: {}".format(token))
class PSDLE_MainWindow(QtWidgets.QMainWindow):
def changeUrl(self, token):
print("[DEBUG] signal received: {}".format(token))
request = QtWebEngineCore.QWebEngineHttpRequest()
request.Method(0)
# items are set to a maximum of 9 999 999
request.setUrl(QtCore.QUrl('https://commerce.api.np.km.playstation.net/commerce/api/v1/users/me/internal_entitlements?meta_rev=0&revision=0&start=0&size=9999999&fields=meta_rev%2Ccloud_meta%2Creward_meta%2Cgame_meta%2Cdrm_def%2Cdrm_def.content_type'))
bdata1 = b'authorization'
bdata2 = 'Bearer {}'.format(token).encode('ascii')
request.setHeader(QtCore.QByteArray(bdata1), QtCore.QByteArray(bdata2))
self.webView.load(request)
self.webView.loadFinished.connect(self.exportData)
def setupUi(self, MainWindow):
# Window stuff
MainWindow.setObjectName("MainWindow")
MainWindow.resize(1000, 800)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.gridLayout = QtWidgets.QGridLayout(self.centralwidget)
self.gridLayout.setObjectName("gridLayout")
MainWindow.setCentralWidget(self.centralwidget)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
# webengine
QtWebEngineWidgets.QWebEngineSettings.defaultSettings().setAttribute(QtWebEngineWidgets.QWebEngineSettings.PluginsEnabled, True)
self.webView = QtWebEngineWidgets.QWebEngineView(self.centralwidget)
self.gridLayout.addWidget(self.webView)
# define url and qurl
url = "https://store.playstation.com"
qurl = QtCore.QUrl(url)
# set profile:
page = QtWebEngineWidgets.QWebEnginePage()
profile = page.profile()
urlinterceptor = BrowserReqIntercept(page)
profile.setRequestInterceptor(urlinterceptor)
profile.setHttpUserAgent(ua_windows)
# load page:
self.webView.setPage(page)
self.webView.load(qurl)
# check if bearer token signal was emitted
urlinterceptor.tokenS.connect(self.changeUrl)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
def exportData(self, event):
if event is True:
self.webView.page().toPlainText(self.plainTextData)
def plainTextData(self, data):
data = json.loads(data)
if data['total_results'] != len(data['entitlements']):
print("[WARNING] total_results != entitlements")
# write to file for now....
open('items.json', 'w+', encoding='utf-8', errors='ignore').write(json.dumps(data, indent=4))
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = PSDLE_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment