instasave-sdk 1.0.8 → 1.0.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/url-normalizer.d.ts +26 -0
- package/dist/url-normalizer.d.ts.map +1 -0
- package/dist/url-normalizer.js +85 -0
- package/dist/url-normalizer.js.map +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# InstaSave SDK
|
|
2
2
|
|
|
3
|
-
[](https://github.com/nykadamec/instasave-sdk/releases/tag/v1.0.9)
|
|
4
4
|
[](https://github.com/nykadamec/instasave-sdk/blob/main/CHANGELOG.md)
|
|
5
5
|
|
|
6
6
|
📸 Simple Instagram scraper for downloading images from posts
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* URL normalization for consistent Instagram post URLs
|
|
3
|
+
*/
|
|
4
|
+
export declare class URLNormalizer {
|
|
5
|
+
/**
|
|
6
|
+
* Normalize Instagram URL to consistent format
|
|
7
|
+
*/
|
|
8
|
+
static normalizeInstagramUrl(url: string): string;
|
|
9
|
+
/**
|
|
10
|
+
* Extract post ID from URL object
|
|
11
|
+
*/
|
|
12
|
+
private static extractPostId;
|
|
13
|
+
/**
|
|
14
|
+
* Check if URL is Instagram post URL
|
|
15
|
+
*/
|
|
16
|
+
static isInstagramPostUrl(url: string): boolean;
|
|
17
|
+
/**
|
|
18
|
+
* Get post ID from URL
|
|
19
|
+
*/
|
|
20
|
+
static getPostId(url: string): string;
|
|
21
|
+
/**
|
|
22
|
+
* Normalize multiple URLs
|
|
23
|
+
*/
|
|
24
|
+
static normalizeUrls(urls: string[]): string[];
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=url-normalizer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"url-normalizer.d.ts","sourceRoot":"","sources":["../src/url-normalizer.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,qBAAa,aAAa;IACxB;;OAEG;IACH,MAAM,CAAC,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAmBjD;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,aAAa;IAwB5B;;OAEG;IACH,MAAM,CAAC,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAU/C;;OAEG;IACH,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAerC;;OAEG;IACH,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE;CAG/C"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* URL normalization for consistent Instagram post URLs
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.URLNormalizer = void 0;
|
|
7
|
+
class URLNormalizer {
|
|
8
|
+
/**
|
|
9
|
+
* Normalize Instagram URL to consistent format
|
|
10
|
+
*/
|
|
11
|
+
static normalizeInstagramUrl(url) {
|
|
12
|
+
try {
|
|
13
|
+
const urlObj = new URL(url);
|
|
14
|
+
// Extract post ID from various URL formats
|
|
15
|
+
const postId = this.extractPostId(urlObj);
|
|
16
|
+
if (!postId) {
|
|
17
|
+
throw new Error('Invalid Instagram post URL - no post ID found');
|
|
18
|
+
}
|
|
19
|
+
// Return normalized format
|
|
20
|
+
return `https://www.instagram.com/p/${postId}/`;
|
|
21
|
+
}
|
|
22
|
+
catch (error) {
|
|
23
|
+
throw new Error(`Failed to normalize URL: ${url} - ${error}`);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Extract post ID from URL object
|
|
28
|
+
*/
|
|
29
|
+
static extractPostId(urlObj) {
|
|
30
|
+
const pathname = urlObj.pathname;
|
|
31
|
+
// Pattern 1: /p/POST_ID/
|
|
32
|
+
const directMatch = pathname.match(/\/p\/([^\/]+)/);
|
|
33
|
+
if (directMatch) {
|
|
34
|
+
return directMatch[1];
|
|
35
|
+
}
|
|
36
|
+
// Pattern 2: /username/p/POST_ID/
|
|
37
|
+
const userMatch = pathname.match(/\/[^\/]+\/p\/([^\/]+)/);
|
|
38
|
+
if (userMatch) {
|
|
39
|
+
return userMatch[1];
|
|
40
|
+
}
|
|
41
|
+
// Pattern 3: /reel/POST_ID/
|
|
42
|
+
const reelMatch = pathname.match(/\/reel\/([^\/]+)/);
|
|
43
|
+
if (reelMatch) {
|
|
44
|
+
return reelMatch[1];
|
|
45
|
+
}
|
|
46
|
+
return null;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Check if URL is Instagram post URL
|
|
50
|
+
*/
|
|
51
|
+
static isInstagramPostUrl(url) {
|
|
52
|
+
try {
|
|
53
|
+
const urlObj = new URL(url);
|
|
54
|
+
return urlObj.hostname.includes('instagram.com') &&
|
|
55
|
+
this.extractPostId(urlObj) !== null;
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
return false;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Get post ID from URL
|
|
63
|
+
*/
|
|
64
|
+
static getPostId(url) {
|
|
65
|
+
try {
|
|
66
|
+
const urlObj = new URL(url);
|
|
67
|
+
const postId = this.extractPostId(urlObj);
|
|
68
|
+
if (!postId) {
|
|
69
|
+
throw new Error('No post ID found in URL');
|
|
70
|
+
}
|
|
71
|
+
return postId;
|
|
72
|
+
}
|
|
73
|
+
catch (error) {
|
|
74
|
+
throw new Error(`Failed to extract post ID from: ${url} - ${error}`);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Normalize multiple URLs
|
|
79
|
+
*/
|
|
80
|
+
static normalizeUrls(urls) {
|
|
81
|
+
return urls.map(url => this.normalizeInstagramUrl(url));
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
exports.URLNormalizer = URLNormalizer;
|
|
85
|
+
//# sourceMappingURL=url-normalizer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"url-normalizer.js","sourceRoot":"","sources":["../src/url-normalizer.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,MAAa,aAAa;IACxB;;OAEG;IACH,MAAM,CAAC,qBAAqB,CAAC,GAAW;QACtC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;YAE5B,2CAA2C;YAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;YAE1C,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;YACnE,CAAC;YAED,2BAA2B;YAC3B,OAAO,+BAA+B,MAAM,GAAG,CAAC;QAElD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,4BAA4B,GAAG,MAAM,KAAK,EAAE,CAAC,CAAC;QAChE,CAAC;IACH,CAAC;IAED;;OAEG;IACK,MAAM,CAAC,aAAa,CAAC,MAAW;QACtC,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QAEjC,yBAAyB;QACzB,MAAM,WAAW,GAAG,QAAQ,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;QACpD,IAAI,WAAW,EAAE,CAAC;YAChB,OAAO,WAAW,CAAC,CAAC,CAAC,CAAC;QACxB,CAAC;QAED,kCAAkC;QAClC,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;QAC1D,IAAI,SAAS,EAAE,CAAC;YACd,OAAO,SAAS,CAAC,CAAC,CAAC,CAAC;QACtB,CAAC;QAED,4BAA4B;QAC5B,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;QACrD,IAAI,SAAS,EAAE,CAAC;YACd,OAAO,SAAS,CAAC,CAAC,CAAC,CAAC;QACtB,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,kBAAkB,CAAC,GAAW;QACnC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;YAC5B,OAAO,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,eAAe,CAAC;gBACzC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC;QAC7C,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,SAAS,CAAC,GAAW;QAC1B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;YAC5B,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;YAE1C,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;YAC7C,CAAC;YAED,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,mCAAmC,GAAG,MAAM,KAAK,EAAE,CAAC,CAAC;QACvE,CAAC;IACH,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,aAAa,CAAC,IAAc;QACjC,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1D,CAAC;CACF;AAvFD,sCAuFC"}
|