Skip to content

Commit 80b0556

Browse files
committedJan 29, 2024
fix: Actualiser le scraper de TikTok.
1 parent 9bee8b7 commit 80b0556

File tree

3 files changed

+39
-25
lines changed

3 files changed

+39
-25
lines changed
 

‎src/core/scraper/tiktok.js

+5-4
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,15 @@ import { matchPattern } from "../tools/matchpattern.js";
2020
*/
2121
const action = async function (_url, metadata) {
2222
const doc = await metadata.html();
23-
const script = doc.querySelector("script#SIGI_STATE");
23+
const script = doc.querySelector(
24+
"script#__UNIVERSAL_DATA_FOR_REHYDRATION__",
25+
);
2426
if (null === script) {
2527
return undefined;
2628
}
2729

2830
const json = JSON.parse(script.text);
29-
return "ItemModule" in json
30-
? Object.values(json.ItemModule)[0].video.playAddr
31-
: undefined;
31+
return json["__DEFAULT_SCOPE__"]["webapp.video-detail"]?.itemInfo.itemStruct
32+
.video.playAddr;
3233
};
3334
export const extract = matchPattern(action, "*://www.tiktok.com/*");

‎test/unit/core/scraper/lemonde.js

+13-6
Original file line numberDiff line numberDiff line change
@@ -207,13 +207,20 @@ describe("core/scraper/lemonde.js", function () {
207207
const stub = sinon.stub(globalThis, "fetch").resolves(
208208
new Response(
209209
`<html><body>
210-
<script id="SIGI_STATE">${JSON.stringify({
211-
AppContext: {},
212-
ItemModule: [
213-
{
214-
video: { playAddr: "http://foo.io/bar.mp4" },
210+
<script id="__UNIVERSAL_DATA_FOR_REHYDRATION__"
211+
>${JSON.stringify({
212+
__DEFAULT_SCOPE__: {
213+
"webapp.video-detail": {
214+
itemInfo: {
215+
itemStruct: {
216+
video: {
217+
playAddr:
218+
"http://foo.io/bar.mp4",
219+
},
220+
},
221+
},
215222
},
216-
],
223+
},
217224
})}</script>
218225
</body></html>`,
219226
{ headers: { "Content-Type": "text/html" } },

‎test/unit/core/scraper/tiktok.js

+21-15
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,9 @@ describe("core/scraper/tiktok.js", function () {
3939
Promise.resolve(
4040
new DOMParser().parseFromString(
4141
`<html><body>
42-
<script id="SIGI_STATE">${JSON.stringify({
43-
AppContext: {},
42+
<script id="__UNIVERSAL_DATA_FOR_REHYDRATION__"
43+
>${JSON.stringify({
44+
__DEFAULT_SCOPE__: {},
4445
})}</script>
4546
</body></html>`,
4647
"text/html",
@@ -58,19 +59,24 @@ describe("core/scraper/tiktok.js", function () {
5859
html: () =>
5960
Promise.resolve(
6061
new DOMParser().parseFromString(
61-
`
62-
<html><body>
63-
<script id="SIGI_STATE">${JSON.stringify({
64-
AppContext: {},
65-
ItemModule: [
66-
{
67-
video: {
68-
playAddr: "https://bar.com/baz.mp4",
69-
},
70-
},
71-
],
72-
})}</script>
73-
</body></html>`,
62+
`<html><body>
63+
<script id="__UNIVERSAL_DATA_FOR_REHYDRATION__"
64+
>${JSON.stringify({
65+
__DEFAULT_SCOPE__: {
66+
"webapp.video-detail": {
67+
itemInfo: {
68+
itemStruct: {
69+
video: {
70+
playAddr:
71+
"https://bar.com" +
72+
"/baz.mp4",
73+
},
74+
},
75+
},
76+
},
77+
},
78+
})}</script>
79+
</body></html>`,
7480
"text/html",
7581
),
7682
),

0 commit comments

Comments
 (0)