@kongyo2/nicotag-api 0.1.0

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.
Files changed (63) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +118 -0
  3. package/dist/errors.js +69 -0
  4. package/dist/errors.js.map +1 -0
  5. package/dist/extractors/cheerio.js +17 -0
  6. package/dist/extractors/cheerio.js.map +1 -0
  7. package/dist/extractors/index.js +24 -0
  8. package/dist/extractors/index.js.map +1 -0
  9. package/dist/extractors/manual-decode.js +41 -0
  10. package/dist/extractors/manual-decode.js.map +1 -0
  11. package/dist/extractors/node-html-parser.js +19 -0
  12. package/dist/extractors/node-html-parser.js.map +1 -0
  13. package/dist/extractors/regex-he.js +20 -0
  14. package/dist/extractors/regex-he.js.map +1 -0
  15. package/dist/extractors/regex-manual.js +20 -0
  16. package/dist/extractors/regex-manual.js.map +1 -0
  17. package/dist/extractors/types.js +2 -0
  18. package/dist/extractors/types.js.map +1 -0
  19. package/dist/fetcher.js +145 -0
  20. package/dist/fetcher.js.map +1 -0
  21. package/dist/index.js +10 -0
  22. package/dist/index.js.map +1 -0
  23. package/dist/parsers/server-response.js +28 -0
  24. package/dist/parsers/server-response.js.map +1 -0
  25. package/dist/types.js +68 -0
  26. package/dist/types.js.map +1 -0
  27. package/dist/url.js +9 -0
  28. package/dist/url.js.map +1 -0
  29. package/dist/video-id.js +22 -0
  30. package/dist/video-id.js.map +1 -0
  31. package/dist/watch.js +59 -0
  32. package/dist/watch.js.map +1 -0
  33. package/dist-types/errors.d.ts +55 -0
  34. package/dist-types/errors.d.ts.map +1 -0
  35. package/dist-types/extractors/cheerio.d.ts +3 -0
  36. package/dist-types/extractors/cheerio.d.ts.map +1 -0
  37. package/dist-types/extractors/index.d.ts +10 -0
  38. package/dist-types/extractors/index.d.ts.map +1 -0
  39. package/dist-types/extractors/manual-decode.d.ts +2 -0
  40. package/dist-types/extractors/manual-decode.d.ts.map +1 -0
  41. package/dist-types/extractors/node-html-parser.d.ts +3 -0
  42. package/dist-types/extractors/node-html-parser.d.ts.map +1 -0
  43. package/dist-types/extractors/regex-he.d.ts +3 -0
  44. package/dist-types/extractors/regex-he.d.ts.map +1 -0
  45. package/dist-types/extractors/regex-manual.d.ts +3 -0
  46. package/dist-types/extractors/regex-manual.d.ts.map +1 -0
  47. package/dist-types/extractors/types.d.ts +6 -0
  48. package/dist-types/extractors/types.d.ts.map +1 -0
  49. package/dist-types/fetcher.d.ts +26 -0
  50. package/dist-types/fetcher.d.ts.map +1 -0
  51. package/dist-types/index.d.ts +10 -0
  52. package/dist-types/index.d.ts.map +1 -0
  53. package/dist-types/parsers/server-response.d.ts +3 -0
  54. package/dist-types/parsers/server-response.d.ts.map +1 -0
  55. package/dist-types/types.d.ts +239 -0
  56. package/dist-types/types.d.ts.map +1 -0
  57. package/dist-types/url.d.ts +7 -0
  58. package/dist-types/url.d.ts.map +1 -0
  59. package/dist-types/video-id.d.ts +7 -0
  60. package/dist-types/video-id.d.ts.map +1 -0
  61. package/dist-types/watch.d.ts +40 -0
  62. package/dist-types/watch.d.ts.map +1 -0
  63. package/package.json +67 -0
@@ -0,0 +1,7 @@
1
+ import { z } from 'zod';
2
+ export declare const VideoIdSchema: z.ZodString;
3
+ export type VideoId = z.infer<typeof VideoIdSchema>;
4
+ export declare function isValidVideoId(input: string): input is VideoId;
5
+ export declare function assertVideoId(input: string): asserts input is VideoId;
6
+ export declare function normalizeVideoId(input: string): VideoId;
7
+ //# sourceMappingURL=video-id.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"video-id.d.ts","sourceRoot":"","sources":["../src/video-id.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,eAAO,MAAM,aAAa,aAIqC,CAAC;AAEhE,MAAM,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AAEpD,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,OAAO,CAE9D;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,IAAI,OAAO,CAOrE;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAIvD"}
@@ -0,0 +1,40 @@
1
+ import { type Extractor, type ExtractorName } from './extractors/index.js';
2
+ import { type ExtractorAttempt } from './errors.js';
3
+ import { type HttpFetchOptions } from './fetcher.js';
4
+ import type { ServerResponse, TagItem, TagSection, VideoSection } from './types.js';
5
+ export type FetchVideoOptions = {
6
+ videoId: string;
7
+ baseUrl?: string;
8
+ extractors?: readonly Extractor[];
9
+ http?: HttpFetchOptions;
10
+ };
11
+ export type FetchTagsResult = {
12
+ readonly url: string;
13
+ readonly fetchedAt: string;
14
+ readonly videoId: string;
15
+ readonly tags: ReadonlyArray<TagItem>;
16
+ readonly tagNames: ReadonlyArray<string>;
17
+ readonly extractorUsed: ExtractorName;
18
+ readonly fetchAttempts: number;
19
+ readonly extractorAttempts: ReadonlyArray<ExtractorAttempt>;
20
+ };
21
+ export type FetchVideoResult = {
22
+ readonly url: string;
23
+ readonly fetchedAt: string;
24
+ readonly videoId: string;
25
+ readonly video: VideoSection;
26
+ readonly tag: TagSection;
27
+ readonly serverResponse: ServerResponse;
28
+ readonly extractorUsed: ExtractorName;
29
+ readonly fetchAttempts: number;
30
+ readonly extractorAttempts: ReadonlyArray<ExtractorAttempt>;
31
+ };
32
+ export declare function fetchVideoTags(options: FetchVideoOptions): Promise<FetchTagsResult>;
33
+ export declare function fetchVideo(options: FetchVideoOptions): Promise<FetchVideoResult>;
34
+ export type ParseHtmlResult = {
35
+ readonly parsed: ServerResponse;
36
+ readonly extractorUsed: ExtractorName;
37
+ readonly attempts: ReadonlyArray<ExtractorAttempt>;
38
+ };
39
+ export declare function extractAndParse(html: string, extractors?: readonly Extractor[]): ParseHtmlResult;
40
+ //# sourceMappingURL=watch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watch.d.ts","sourceRoot":"","sources":["../src/watch.ts"],"names":[],"mappings":"AAAA,OAAO,EAA2B,KAAK,SAAS,EAAE,KAAK,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACpG,OAAO,EAAgB,KAAK,gBAAgB,EAA+B,MAAM,aAAa,CAAC;AAC/F,OAAO,EAAsB,KAAK,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAEzE,OAAO,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAIpF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,SAAS,SAAS,EAAE,CAAC;IAClC,IAAI,CAAC,EAAE,gBAAgB,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;IACtC,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IACzC,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC;IACtC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,iBAAiB,EAAE,aAAa,CAAC,gBAAgB,CAAC,CAAC;CAC7D,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;IAC7B,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAC;IACzB,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAC;IACxC,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC;IACtC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,iBAAiB,EAAE,aAAa,CAAC,gBAAgB,CAAC,CAAC;CAC7D,CAAC;AAEF,wBAAsB,cAAc,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,eAAe,CAAC,CAYzF;AAED,wBAAsB,UAAU,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAuBtF;AAED,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAChC,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC;IACtC,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC,gBAAgB,CAAC,CAAC;CACpD,CAAC;AAEF,wBAAgB,eAAe,CAC7B,IAAI,EAAE,MAAM,EACZ,UAAU,GAAE,SAAS,SAAS,EAA4B,GACzD,eAAe,CAqBjB"}
package/package.json ADDED
@@ -0,0 +1,67 @@
1
+ {
2
+ "name": "@kongyo2/nicotag-api",
3
+ "version": "0.1.0",
4
+ "description": "Unofficial alternative client for fetching nicovideo.jp video tags by video id via HTML scraping with multi-fallback parsers.",
5
+ "type": "module",
6
+ "publishConfig": {
7
+ "access": "public",
8
+ "provenance": true
9
+ },
10
+ "repository": {
11
+ "type": "git",
12
+ "url": "git+https://github.com/kongyo2/nicotag-api.git"
13
+ },
14
+ "exports": {
15
+ ".": {
16
+ "types": "./dist-types/index.d.ts",
17
+ "import": "./dist/index.js",
18
+ "default": "./dist/index.js"
19
+ }
20
+ },
21
+ "main": "./dist/index.js",
22
+ "types": "./dist-types/index.d.ts",
23
+ "files": [
24
+ "dist",
25
+ "dist-types"
26
+ ],
27
+ "sideEffects": false,
28
+ "engines": {
29
+ "node": ">=20"
30
+ },
31
+ "scripts": {
32
+ "build": "tsc -p tsconfig.json",
33
+ "clean": "node -e \"const f=require('fs');for(const d of ['dist','dist-types','.tsbuildinfo']){try{f.rmSync(d,{recursive:true,force:true});}catch{}}\"",
34
+ "format": "prettier --write .",
35
+ "format:check": "prettier --check .",
36
+ "check:file": "oxlint",
37
+ "lint": "oxlint --silent",
38
+ "lint:strict": "oxlint --deny-warnings",
39
+ "test": "vitest run",
40
+ "test:watch": "vitest",
41
+ "test:live": "vitest run --reporter=verbose tests/live.test.ts",
42
+ "typecheck": "tsc -p tsconfig.json --noEmit"
43
+ },
44
+ "keywords": [
45
+ "nicovideo",
46
+ "niconico",
47
+ "tags",
48
+ "scraper",
49
+ "unofficial-api"
50
+ ],
51
+ "license": "MIT",
52
+ "dependencies": {
53
+ "cheerio": "^1.0.0",
54
+ "he": "^1.2.0",
55
+ "node-html-parser": "^6.1.13",
56
+ "zod": "^3.23.8"
57
+ },
58
+ "devDependencies": {
59
+ "@types/he": "^1.2.3",
60
+ "@types/node": "^22.5.0",
61
+ "oxlint": "^0.9.0",
62
+ "prettier": "^3.3.3",
63
+ "tsx": "^4.19.0",
64
+ "typescript": "^5.6.0",
65
+ "vitest": "^4.1.6"
66
+ }
67
+ }