You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: README.md
+60-4Lines changed: 60 additions & 4 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -8,7 +8,7 @@ pip install ps4-updates
8
8
```
9
9
10
10
## Typical Usage
11
-
Create a `Ps4TitleUpdate` object by specifying a PS4 Title Id (eg. `CUSA00001_00` or `CUSA00001`).
11
+
Create a `Ps4TitleUpdate` object by specifying a PS4 Title Id (eg. `CUSA00001_00` or `CUSA00001`). A list of known Title Ids is [available here](https://andshrew.github.io/PlayStation-Titles/?platform=ps4&hasContentId).
12
12
13
13
Invoke `get_update()` on the object to begin retrieving information about the update. If an update is available it will try to retrieve the following:
14
14
@@ -19,11 +19,12 @@ Invoke `get_update()` on the object to begin retrieving information about the up
19
19
* Download Size
20
20
* Update Creation Date
21
21
* changeinfo.xml (developer included update notes)
22
+
* param.sfo update pkg parameters
22
23
23
24
## Limitations
24
25
Only information about the current update version can be retrieved.
25
26
26
-
It is not a guarantee that changeinfo.xml will be included within the updates pkg file. The file is typically located at the start of the file, however it does not appear to be in a fixed location. This package attempts to locate it by downloading up to the first 30MB of the pkg file. You can increase (or decrease) this search range by setting `byte_limit` when creating a `Ps4TitleUpdate` object.
27
+
It is not a guarantee that `changeinfo.xml` will be included within the updates pkg file. This package attempts to locate it (and `param.sfo`) by parsing the update PKG file header. By default it will download up to the first 50MB of the PKG file, but if either the `changeinfo.xml` or `param.sfo` are located beyond this range then neither will be downloaded and no more data will be downloaded beyond the range of the PKG header. You can increase (or decrease) this limit by setting the`byte_limit` when creating a `Ps4TitleUpdate` object.
@@ -122,12 +122,68 @@ You can manually invoke `_get_partial_pkg_file()`, which makes the following ava
122
122
| update_pkg_exists |`True` if some data was found in pkg file at `update_pkg_url`|
123
123
| update_pkg_cdate | Update creation date as string YYYYMMDD |
124
124
| update_pkg_cdate_as_date | Update creation date as datetime |
125
+
| update_pkg_param_sfo | An `SFO` object if the pkg param.sfo file was found and parsed |
126
+
| update_pkg_bytes_exceeded |`True` if the pkg file header was parsed but data exists beyond the range of the specified `bytes_limit`|
125
127
| changeinfo_exists |`True` if changeinfo.xml was found |
126
128
| changeinfo | List of dicts for each change in changeinfo.xml |
127
129
| changeinfo_count | Number of changes in changeinfo.xml |
128
130
| changeinfo_current_exists |`True` if a change matching the current version number was in changeinfo.xml |
129
131
| changeinfo_current | List of dicts for change matching the current version |
130
132
| changeinfo_xml | Full XML for changeinfo.xml
131
133
134
+
## `SFO` and `SFO_Entry` Object Reference
135
+
By default, if an update exists then `get_update()` will download and attempt to parse the beginning of the updates pkg file. If the [`param.sfo`](https://www.psdevwiki.com/ps4/Param.sfo) file is located then the entries that it contains will be parsed into `SFO_Entry` objects and attached to a single `SFO` object that is then accessible from the `update_pkg_param_sfo` attribute of a `Ps4TitleUpdate` object.
136
+
137
+
For details of the information that might be in these objects, see the [Parameter Descriptions on psdevwiki.com](https://www.psdevwiki.com/ps4/Param.sfo#Parameters_Descriptions).
138
+
139
+
The entries data (as bytes) is saved in the `SFO_Entry` objects `data_bytes` attribute. Your application will need to further parse this information into a usable format.
140
+
141
+
### Example for parsing the SAVE_DATA_TRANSFER_TITLE_ID_LIST parameter
142
+
There will be an entry in the param.sfo file named `SAVE_DATA_TRANSFER_TITLE_ID_LIST` if the title supports reading another titles save data files (ie. for save transfer between games).
143
+
144
+
This example will print a titles update information to the screen, and then additionally print information from this specific SFO entry (if it exists).
145
+
146
+
```python
147
+
from ps4_updates import title as ps4up
148
+
149
+
title = ps4up.Ps4TitleUpdate('CUSA00897')
150
+
title.get_update()
151
+
title.print_update_info()
152
+
153
+
if title.update_pkg_exists isTrue:
154
+
entry =next((x for x in title.update_pkg_param_sfo.entries if x.name =="SAVE_DATA_TRANSFER_TITLE_ID_LIST"), None)
[Zer0xFF](https://gist.github.com/Zer0xFF/d94818f15e3e85b0b4d48000a4be1c73) - sharing the method for generating a title update URL
188
+
[Zer0xFF](https://gist.github.com/Zer0xFF/d94818f15e3e85b0b4d48000a4be1c73) - sharing the method for generating a title update URL
189
+
[psdevwiki](https://www.psdevwiki.com/ps4) - documentation on [PKG file format](https://www.psdevwiki.com/ps4/PKG_files) and [param.sfo files](https://www.psdevwiki.com/ps4/Param.sfo)
0 commit comments