multi_embed_player 3.1.0 → 3.1.1

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 (117) hide show
  1. package/dist/iframe_api/bilibili.d.ts +210 -0
  2. package/dist/iframe_api/bilibili.d.ts.map +1 -0
  3. package/dist/iframe_api/bilibili.js +1035 -0
  4. package/dist/iframe_api/bilibili.js.map +1 -0
  5. package/dist/iframe_api/niconico.d.ts +191 -0
  6. package/dist/iframe_api/niconico.d.ts.map +1 -0
  7. package/dist/iframe_api/niconico.js +325 -0
  8. package/dist/iframe_api/niconico.js.map +1 -0
  9. package/dist/iframe_api/soundcloud.d.ts +152 -0
  10. package/dist/iframe_api/soundcloud.d.ts.map +1 -0
  11. package/dist/iframe_api/soundcloud.js +360 -0
  12. package/dist/iframe_api/soundcloud.js.map +1 -0
  13. package/dist/iframe_api/youtube.d.ts +96 -0
  14. package/dist/iframe_api/youtube.d.ts.map +1 -0
  15. package/dist/iframe_api/youtube.js +269 -0
  16. package/dist/iframe_api/youtube.js.map +1 -0
  17. package/dist/multi_embed_player.d.ts +215 -0
  18. package/dist/multi_embed_player.d.ts.map +1 -0
  19. package/dist/multi_embed_player.js +921 -0
  20. package/dist/multi_embed_player.js.map +1 -0
  21. package/package.json +1 -1
  22. package/.github/workflows/build-and-deploy.yml +0 -44
  23. package/.gitmodules +0 -3
  24. package/browserExtention/chrome/background.js +0 -55
  25. package/browserExtention/chrome/extention.json +0 -1
  26. package/browserExtention/chrome/liteplayer.js +0 -26439
  27. package/browserExtention/chrome/manifest.json +0 -31
  28. package/browserExtention/chrome/player-selector.js +0 -1854
  29. package/browserExtention/firefox/background.js +0 -27
  30. package/browserExtention/firefox/extention.json +0 -1
  31. package/browserExtention/firefox/liteplayer.js +0 -26439
  32. package/browserExtention/firefox/manifest.json +0 -19
  33. package/browserExtention/firefox/player-selector.js +0 -1854
  34. package/documents/.hugo_build.lock +0 -0
  35. package/documents/archetypes/default.md +0 -5
  36. package/documents/assets/jsconfig.json +0 -11
  37. package/documents/content/docs/install.md +0 -103
  38. package/documents/content/docs/quickstart.md +0 -51
  39. package/documents/content/docs/reference/HTML.md +0 -31
  40. package/documents/content/docs/reference/_index.md +0 -10
  41. package/documents/content/docs/reference/error_code.md +0 -23
  42. package/documents/content/docs/reference/iframe_api.md +0 -737
  43. package/documents/content/docs/reference/iframe_class.md +0 -230
  44. package/documents/content/docs/reference/multi_embed_player_class.md +0 -113
  45. package/documents/content/docs/reference/reserved_words.md +0 -71
  46. package/documents/content/docs/usage/GDPR_mode.md +0 -77
  47. package/documents/content/docs/usage/_index.md +0 -10
  48. package/documents/content/docs/usage/custom_playlist.md +0 -239
  49. package/documents/content/docs/usage/embed_api.md +0 -163
  50. package/documents/content/docs/usage/embed_various_service.md +0 -81
  51. package/documents/content/docs/usage/thumbnail_click.md +0 -57
  52. package/documents/go.mod +0 -8
  53. package/documents/go.sum +0 -14
  54. package/documents/hugo.toml +0 -18
  55. package/documents/layouts/partials/docs/sidebar.html +0 -117
  56. package/documents/layouts/partials/landing/features.html +0 -47
  57. package/documents/layouts/robots.txt +0 -4
  58. package/documents/static/_headers +0 -7
  59. package/documents/static/localStorageCheck.html +0 -27
  60. package/documents/static/no_extention.json +0 -1
  61. package/example.html +0 -27
  62. package/extention.json +0 -1
  63. package/icon/video_not_found.odg +0 -0
  64. package/icon/video_not_found.svgz +0 -0
  65. package/iframe_api/bilibili.ts +0 -1095
  66. package/iframe_api/niconico.ts +0 -429
  67. package/iframe_api/soundcloud.ts +0 -450
  68. package/iframe_api/youtube.ts +0 -311
  69. package/multi_embed_player.ts +0 -989
  70. package/player_api_gate/bilibili-api-gate/cgi/cpp/bilibili-api-gate-cgi.cpp +0 -281
  71. package/player_api_gate/bilibili-api-gate/cgi/go/src.go +0 -46
  72. package/player_api_gate/bilibili-api-gate/cloudflare_workers/package-lock.json +0 -1356
  73. package/player_api_gate/bilibili-api-gate/cloudflare_workers/package.json +0 -12
  74. package/player_api_gate/bilibili-api-gate/cloudflare_workers/src/index.js +0 -50
  75. package/player_api_gate/bilibili-api-gate/cloudflare_workers/wrangler.toml +0 -3
  76. package/player_api_gate/iframe-api-ts/.editorconfig +0 -12
  77. package/player_api_gate/iframe-api-ts/.prettierrc +0 -6
  78. package/player_api_gate/iframe-api-ts/package-lock.json +0 -3054
  79. package/player_api_gate/iframe-api-ts/package.json +0 -18
  80. package/player_api_gate/iframe-api-ts/src/bilibili.ts +0 -49
  81. package/player_api_gate/iframe-api-ts/src/index.ts +0 -35
  82. package/player_api_gate/iframe-api-ts/src/niconico.ts +0 -95
  83. package/player_api_gate/iframe-api-ts/src/soundcloud.ts +0 -38
  84. package/player_api_gate/iframe-api-ts/src/types.ts +0 -115
  85. package/player_api_gate/iframe-api-ts/src/url-proxy.ts +0 -29
  86. package/player_api_gate/iframe-api-ts/src/utils.ts +0 -82
  87. package/player_api_gate/iframe-api-ts/src/youtube.ts +0 -41
  88. package/player_api_gate/iframe-api-ts/test/bilibili.spec.ts +0 -47
  89. package/player_api_gate/iframe-api-ts/test/env.d.ts +0 -3
  90. package/player_api_gate/iframe-api-ts/test/index.spec.ts +0 -59
  91. package/player_api_gate/iframe-api-ts/test/niconico.spec.ts +0 -55
  92. package/player_api_gate/iframe-api-ts/test/soundcloud.spec.ts +0 -55
  93. package/player_api_gate/iframe-api-ts/test/tsconfig.json +0 -8
  94. package/player_api_gate/iframe-api-ts/test/url-proxy.spec.ts +0 -46
  95. package/player_api_gate/iframe-api-ts/test/youtube.spec.ts +0 -45
  96. package/player_api_gate/iframe-api-ts/tsconfig.json +0 -45
  97. package/player_api_gate/iframe-api-ts/vitest.config.mts +0 -11
  98. package/player_api_gate/iframe-api-ts/worker-configuration.d.ts +0 -5768
  99. package/player_api_gate/iframe-api-ts/wrangler.jsonc +0 -47
  100. package/player_api_gate/iframe_api/.editorconfig +0 -13
  101. package/player_api_gate/iframe_api/.prettierrc +0 -6
  102. package/player_api_gate/iframe_api/package-lock.json +0 -1307
  103. package/player_api_gate/iframe_api/package.json +0 -12
  104. package/player_api_gate/iframe_api/src/bilibili_api.js +0 -60
  105. package/player_api_gate/iframe_api/src/index.js +0 -47
  106. package/player_api_gate/iframe_api/src/niconico_api.js +0 -112
  107. package/player_api_gate/iframe_api/src/soundcloud_api.js +0 -57
  108. package/player_api_gate/iframe_api/src/url_proxy.js +0 -28
  109. package/player_api_gate/iframe_api/src/youtube_api.js +0 -44
  110. package/player_api_gate/iframe_api/wrangler.toml +0 -51
  111. package/player_api_gate/niconico-imager/cgi/go/src.go +0 -74
  112. package/player_api_gate/niconico-imager/cloudflare_workers/package-lock.json +0 -2175
  113. package/player_api_gate/niconico-imager/cloudflare_workers/package.json +0 -12
  114. package/player_api_gate/niconico-imager/cloudflare_workers/src/index.js +0 -78
  115. package/player_api_gate/niconico-imager/cloudflare_workers/wrangler.toml +0 -3
  116. package/test_script.html +0 -172
  117. package/tsconfig.json +0 -36
@@ -1,12 +0,0 @@
1
- {
2
- "name": "iframe_api",
3
- "version": "0.0.0",
4
- "private": true,
5
- "scripts": {
6
- "deploy": "wrangler deploy",
7
- "start": "wrangler dev"
8
- },
9
- "devDependencies": {
10
- "wrangler": "^3.61.0"
11
- }
12
- }
@@ -1,60 +0,0 @@
1
- /**
2
- * Welcome to Cloudflare Workers! This is your first worker.
3
- *
4
- * - Run `npx wrangler dev src/index.js` in your terminal to start a development server
5
- * - Open a browser tab at http://localhost:8787/ to see your worker in action
6
- * - Run `npx wrangler publish src/index.js --name my-worker` to publish your worker
7
- *
8
- * Learn more at https://developers.cloudflare.com/workers/
9
- */
10
-
11
- export default {
12
- async fetch(request, env, ctx) {
13
- let return_data = {};
14
- //get query string
15
- const { searchParams } = new URL(request.url);
16
- let videoid = searchParams.get('videoid');
17
- if(videoid==null){
18
- return_data["status"] = "failed";
19
- return_data["message"] = "plese set bvid in query string example ?videoid=BV1Yq4y1Z785";
20
- return_data["product_type"] = "bilibili api";
21
- return new Response(JSON.stringify(return_data),
22
- {headers: {
23
- 'content-type': 'application/json',
24
- 'Access-Control-Allow-Origin':'*',
25
- 'cache-control': 'max-age=2592000'
26
- }});
27
- }
28
- //get bilibili api
29
- let url = "https://api.bilibili.com/x/web-interface/view?bvid=" + videoid;
30
- let response,resdata;
31
- console.log(env.PROXY_VIA_URL)
32
- if(env.PROXY_VIA_URL){
33
- response = await fetch(env.PROXY_VIA_URL,{"method":"POST","body":JSON.stringify({"urls":[url]}),"headers":{"content-type":"application/json","user-agent":env.PROXY_AUTH}});
34
- let res_tmp_data = await response.json();
35
- resdata = res_tmp_data[url];
36
- resdata = JSON.parse(resdata);
37
- }
38
- else{
39
- response = await fetch(url);
40
- resdata = await response.json();
41
- }
42
- if(resdata["code"]==0&&searchParams.get("image_base64")==1){
43
- const image_data = await(await fetch(resdata["data"]["pic"])).arrayBuffer();
44
- let binary = '';
45
- const bytes = new Uint8Array(image_data);
46
- const len = bytes.byteLength;
47
- for (let i = 0; i < len; i++) {
48
- binary += String.fromCharCode(bytes[i]);
49
- }
50
- resdata["image_base64"] = "data:image/jpeg;base64," + btoa(binary);
51
- }
52
- return new Response(JSON.stringify(resdata),
53
- {headers: {
54
- 'content-type': 'application/json',
55
- 'Access-Control-Allow-Origin':'*',
56
- 'cache-control': 'max-age=2592000'
57
- },
58
- });
59
- },
60
- };
@@ -1,47 +0,0 @@
1
- /**
2
- * Welcome to Cloudflare Workers! This is your first worker.
3
- *
4
- * - Run `npm run dev` in your terminal to start a development server
5
- * - Open a browser tab at http://localhost:8787/ to see your worker in action
6
- * - Run `npm run deploy` to publish your worker
7
- *
8
- * Learn more at https://developers.cloudflare.com/workers/
9
- */
10
-
11
- import niconico from "./niconico_api";
12
- import bilibili from "./bilibili_api.js";
13
- import url_proxy from "./url_proxy.js";
14
- import soundcloud from "./soundcloud_api.js";
15
- import youtube from "./youtube_api.js";
16
-
17
- export default {
18
- async fetch(request, env, ctx) {
19
- let white_list = [];
20
- if(typeof env.WhiteList === "undefined"){
21
- white_list = [];
22
- }
23
- else{
24
- white_list = JSON.parse(env.WhiteList);
25
- }
26
- const url = new URL(request.url);
27
- // You can get pretty far with simple logic like if/switch-statements
28
- if(white_list.length!==0&&(!(request.headers.get("origin"))||!white_list.includes(request.headers.get("origin")))){
29
- return new Response("access from this origin is not allowed",{status:403});
30
- }
31
-
32
- switch (url.searchParams.get("route")) {
33
- case 'url_proxy':
34
- return url_proxy.fetch(request, env, ctx);
35
- case 'niconico':
36
- return niconico.fetch(request, env, ctx);
37
- case 'bilibili':
38
- return bilibili.fetch(request, env, ctx);
39
- case 'soundcloud':
40
- return soundcloud.fetch(request, env, ctx);
41
- case 'youtube':
42
- return youtube.fetch(request, env, ctx);
43
- default :
44
- return new Response("route not found");
45
- }
46
- },
47
- };
@@ -1,112 +0,0 @@
1
- /**
2
- * Welcome to Cloudflare Workers! This is your first worker.
3
- *
4
- * - Run `npx wrangler dev src/index.js` in your terminal to start a development server
5
- * - Open a browser tab at http://localhost:8787/ to see your worker in action
6
- * - Run `npx wrangler publish src/index.js --name my-worker` to publish your worker
7
- *
8
- * Learn more at https://developers.cloudflare.com/workers/
9
- */
10
-
11
- export default {
12
- xml_search(data, search_string, start = 0) {
13
- return data.substring(data.indexOf("<" + search_string + ">", start) + search_string.length + 2, data.indexOf("</" + search_string + ">", start))
14
- },
15
- random_string(length) {
16
- return [...Array(length)].map(i => (~~(Math.random() * 36)).toString(36)).join('');
17
- },
18
- async fetch(request, env, ctx) {
19
- let return_data = {};
20
- //get query string
21
- const { searchParams } = new URL(request.url);
22
- let videoid = searchParams.get('videoid');
23
- if (videoid == null) {
24
- return_data["status"] = "failed";
25
- return_data["message"] = "plese set videoid in query string";
26
- return_data["product_type"] = "niconico api";
27
- return new Response(JSON.stringify(return_data),
28
- {
29
- headers: {
30
- 'content-type': 'application/json',
31
- 'Access-Control-Allow-Origin': '*',
32
- 'cache-control': 'max-age=2592000'
33
- }
34
- });
35
- }
36
- if (env.NON_PROFIT == "TRUE") {
37
- let url = "https://snapshot.search.nicovideo.jp/api/v2/snapshot/video/contents/search?q&fields=contentId,title,thumbnailUrl,userId,channelId,startTime,lengthSeconds&filters[contentId][0]=" + videoid + "&_sort=-viewCounter&_limit=1&_context=" + this.random_string(10);
38
- const response = await fetch(url);
39
- let res = await response.json();
40
- if (res.meta.status == 200) {
41
- return_data["status"] = "success";
42
- return_data["videoid"] = videoid;
43
- return_data["title"] = res.data[0].title;
44
- return_data["thumbnail_url"] = res.data[0].thumbnailUrl;
45
- return_data["length"] = res.data[0].lengthSeconds;
46
- return_data["view_count"] = res.data[0].viewCounter;
47
- return_data["publish_time"] = res.data[0].startTime;
48
- }
49
- else {
50
- return_data["status"] = "invalid videoid";
51
- return_data["thumbnail_url"] = "";
52
- }
53
- }
54
- else {
55
- //get niconico api
56
- let url = "https://ext.nicovideo.jp/api/getthumbinfo/" + videoid;
57
- const response = await fetch(url);
58
- let res = await response.text();
59
- let image_url = this.xml_search(res, "thumbnail_url");
60
- let predict_long = 43 + 2 * (videoid.length - 2);
61
- if (image_url.length > predict_long) {
62
- image_url += ".L";
63
- }
64
- let xml_videoid = this.xml_search(res, "video_id");
65
- let title = this.xml_search(res, "title");
66
- let description = this.xml_search(res, "description");
67
- let length = this.xml_search(res, "length");
68
- let view_count = this.xml_search(res, "view_counter");
69
- let comment_count = this.xml_search(res, "comment_num");
70
- let mylist_count = this.xml_search(res, "mylist_counter");
71
- let publish_time = this.xml_search(res, "first_retrieve");
72
- let embedable = this.xml_search(res, "embeddable");
73
- let genre = this.xml_search(res, "genre");
74
- if (image_url == "<?xml version=") {
75
- return_data["status"] = "invalid videoid";
76
- return_data["thumbnail_url"] = "";
77
- }
78
- else {
79
- return_data["thumbnail_url"] = image_url;
80
- if (searchParams.get("image_base64") == 1) {
81
- const image_data = await (await fetch(image_url)).arrayBuffer();
82
- let binary = '';
83
- const bytes = new Uint8Array(image_data);
84
- const len = bytes.byteLength;
85
- for (let i = 0; i < len; i++) {
86
- binary += String.fromCharCode(bytes[i]);
87
- }
88
- return_data["image_base64"] = "data:image/jpeg;base64," + btoa(binary);
89
- }
90
- return_data["status"] = "success";
91
- return_data["videoid"] = xml_videoid;
92
- return_data["title"] = title;
93
- return_data["description"] = description;
94
- return_data["length"] = length;
95
- return_data["view_count"] = view_count;
96
- return_data["comment_count"] = comment_count;
97
- return_data["mylist_count"] = mylist_count;
98
- return_data["publish_time"] = publish_time;
99
- return_data["embedable"] = embedable;
100
- return_data["genre"] = genre;
101
- }
102
- }
103
- return new Response(JSON.stringify(return_data),
104
- {
105
- headers: {
106
- 'content-type': 'application/json',
107
- 'Access-Control-Allow-Origin': '*',
108
- 'cache-control': 'max-age=2592000'
109
- },
110
- });
111
- },
112
- };
@@ -1,57 +0,0 @@
1
- export default {
2
- async fetch(request, env, ctx) {
3
- let return_data = {};
4
- //get query string
5
- const { searchParams } = new URL(request.url);
6
- let videoid = searchParams.get('videoid');
7
- if(videoid==null){
8
- return_data["status"] = "failed";
9
- return_data["message"] = "plese set indentify music id in query string example ?videoid=557856309";
10
- return_data["product_type"] = "bilibili api";
11
- return new Response(JSON.stringify(return_data),
12
- {headers: {
13
- 'content-type': 'application/json',
14
- 'Access-Control-Allow-Origin':'*',
15
- 'cache-control': 'max-age=2592000'
16
- }});
17
- }
18
- const numericRegex = /^[0-9]+$/;
19
- let url;
20
- if(numericRegex.test(videoid)){
21
- url = `https://soundcloud.com/oembed?url=https%3A//api.soundcloud.com/tracks/${videoid}&format=json`;
22
- }
23
- else{
24
- url = `https://soundcloud.com/oembed?url=https%3A//soundcloud.com/${videoid}&format=json`;
25
- }
26
- try{
27
- const response = await fetch(url);
28
- let resdata = await response.json();
29
- if(searchParams.get("image_base64")==1){
30
- const image_data = await(await fetch(resdata["thumbnail_url"])).arrayBuffer();
31
- let binary = '';
32
- const bytes = new Uint8Array(image_data);
33
- const len = bytes.byteLength;
34
- for (let i = 0; i < len; i++) {
35
- binary += String.fromCharCode(bytes[i]);
36
- }
37
- resdata["image_base64"] = "data:image/jpeg;base64," + btoa(binary);
38
- }
39
- return new Response(JSON.stringify(resdata),
40
- {headers: {
41
- 'content-type': 'application/json',
42
- 'Access-Control-Allow-Origin':'*',
43
- 'cache-control': 'max-age=2592000'
44
- },
45
- });
46
- }
47
- catch{
48
- return new Response(JSON.stringify({"status":"error not found?"}),
49
- {headers: {
50
- 'content-type': 'application/json',
51
- 'Access-Control-Allow-Origin':'*',
52
- 'cache-control': 'max-age=2592000'
53
- }
54
- });
55
- }
56
- },
57
- };
@@ -1,28 +0,0 @@
1
- export default {
2
- async fetch(request, env, ctx) {
3
- let return_data = {};
4
- //get query string
5
- const { searchParams } = new URL(request.url);
6
- let proxy_url = searchParams.get('url');
7
- if(proxy_url==null){
8
- return_data["status"] = "failed";
9
- return_data["message"] = "plese set url in query string example ?url=https://i.ytimg.com/vi/giXeMGjDkgk/hqdefault.jpg";
10
- return_data["product_type"] = "bilibili api";
11
- return new Response(JSON.stringify(return_data),
12
- {headers: {
13
- 'content-type': 'application/json',
14
- 'Access-Control-Allow-Origin':'*',
15
- 'cache-control': 'max-age=2592000'
16
- }});
17
- }
18
- const fetch_data = await fetch(proxy_url);
19
- const image_data = await fetch_data.arrayBuffer();
20
- return new Response(image_data,
21
- {headers: {
22
- 'content-type': fetch_data.headers.get("content-type"),
23
- 'Access-Control-Allow-Origin':'*',
24
- 'cache-control': 'max-age=2592000'
25
- },
26
- });
27
- },
28
- };
@@ -1,44 +0,0 @@
1
- export default {
2
- async fetch(request, env, ctx) {
3
- let return_data = {};
4
- //get query string
5
- const { searchParams } = new URL(request.url);
6
- let videoid = searchParams.get('videoid');
7
- if(videoid==null){
8
- return_data["status"] = "failed";
9
- return_data["message"] = "plese set indentify music id in query string example ?videoid=W6tZW00lix1";
10
- return_data["product_type"] = "youtube api";
11
- return new Response(JSON.stringify(return_data),
12
- {headers: {
13
- 'content-type': 'application/json',
14
- 'Access-Control-Allow-Origin':'*',
15
- 'cache-control': 'max-age=2592000'
16
- }});
17
- }
18
- const response = await fetch(`https://www.youtube.com/oembed?url=https://www.youtube.com/watch?v=${videoid}&format=json`);
19
- let resdata;
20
- try{
21
- resdata = await response.json();
22
- if(searchParams.get("image_base64")==1){
23
- const image_data = await(await fetch(resdata["thumbnail_url"])).arrayBuffer();
24
- let binary = '';
25
- const bytes = new Uint8Array(image_data);
26
- const len = bytes.byteLength;
27
- for (let i = 0; i < len; i++) {
28
- binary += String.fromCharCode(bytes[i]);
29
- }
30
- resdata["image_base64"] = "data:image/jpeg;base64," + btoa(binary);
31
- }
32
- }
33
- catch{
34
- resdata = {title:"",status:"failed notfound?"};
35
- }
36
- return new Response(JSON.stringify(resdata),
37
- {headers: {
38
- 'content-type': 'application/json',
39
- 'Access-Control-Allow-Origin':'*',
40
- 'cache-control': 'max-age=2592000'
41
- },
42
- });
43
- },
44
- };
@@ -1,51 +0,0 @@
1
- name = "iframe_api"
2
- main = "src/index.js"
3
- compatibility_date = "2023-10-02"
4
-
5
- # Variable bindings. These are arbitrary, plaintext strings (similar to environment variables)
6
- # Note: Use secrets to store sensitive data.
7
- # Docs: https://developers.cloudflare.com/workers/platform/environment-variables
8
- # [vars]
9
- # MY_VARIABLE = "production_value"
10
-
11
- # Bind a KV Namespace. Use KV as persistent storage for small key-value pairs.
12
- # Docs: https://developers.cloudflare.com/workers/runtime-apis/kv
13
- # [[kv_namespaces]]
14
- # binding = "MY_KV_NAMESPACE"
15
- # id = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
16
-
17
- # Bind an R2 Bucket. Use R2 to store arbitrarily large blobs of data, such as files.
18
- # Docs: https://developers.cloudflare.com/r2/api/workers/workers-api-usage/
19
- # [[r2_buckets]]
20
- # binding = "MY_BUCKET"
21
- # bucket_name = "my-bucket"
22
-
23
- # Bind a Queue producer. Use this binding to schedule an arbitrary task that may be processed later by a Queue consumer.
24
- # Docs: https://developers.cloudflare.com/queues/get-started
25
- # [[queues.producers]]
26
- # binding = "MY_QUEUE"
27
- # queue = "my-queue"
28
-
29
- # Bind a Queue consumer. Queue Consumers can retrieve tasks scheduled by Producers to act on them.
30
- # Docs: https://developers.cloudflare.com/queues/get-started
31
- # [[queues.consumers]]
32
- # queue = "my-queue"
33
-
34
- # Bind another Worker service. Use this binding to call another Worker without network overhead.
35
- # Docs: https://developers.cloudflare.com/workers/platform/services
36
- # [[services]]
37
- # binding = "MY_SERVICE"
38
- # service = "/api/*"
39
-
40
- # Bind a Durable Object. Durable objects are a scale-to-zero compute primitive based on the actor model.
41
- # Durable Objects can live for as long as needed. Use these when you need a long-running "server", such as in realtime apps.
42
- # Docs: https://developers.cloudflare.com/workers/runtime-apis/durable-objects
43
- # [[durable_objects.bindings]]
44
- # name = "MY_DURABLE_OBJECT"
45
- # class_name = "MyDurableObject"
46
-
47
- # Durable Object migrations.
48
- # Docs: https://developers.cloudflare.com/workers/learning/using-durable-objects#configure-durable-object-classes-with-migrations
49
- # [[migrations]]
50
- # tag = "v1"
51
- # new_classes = ["MyDurableObject"]
@@ -1,74 +0,0 @@
1
- package main
2
-
3
- import (
4
- "encoding/json"
5
- "fmt"
6
- "io"
7
- "net/http"
8
- "os"
9
- "strings"
10
- "unicode/utf8"
11
- "unsafe"
12
- )
13
-
14
- func xml_search(data string, search_string string) (string, error) {
15
- start := strings.Index(data, "<"+search_string+">")
16
- if start == -1 {
17
- return "", fmt.Errorf("%s not found", search_string)
18
- }
19
- start += utf8.RuneCountInString(search_string) + 2
20
- end := strings.Index(data, "</"+search_string+">")
21
- if end == -1 {
22
- return "", fmt.Errorf("closing tag </%s> not found", search_string)
23
- }
24
- return data[start:end], nil
25
- }
26
-
27
- func main() {
28
- queryString := os.Getenv("QUERY_STRING")
29
- // QUERY_STRINGをパースして、値を取得
30
- values := make(map[string]string)
31
- pairs := strings.Split(queryString, "&")
32
- for _, pair := range pairs {
33
- kv := strings.Split(pair, "=")
34
- if len(kv) == 2 {
35
- values[kv[0]] = kv[1]
36
- }
37
- }
38
- url := "https://ext.nicovideo.jp/api/getthumbinfo/" + values["videoid"]
39
- resp, _ := http.Get(url)
40
- defer resp.Body.Close()
41
- byteArray, _ := io.ReadAll(resp.Body)
42
- xml_string := *(*string)(unsafe.Pointer(&byteArray))
43
- image_url, _ := xml_search(xml_string, "thumbnail_url")
44
- predict_long := 43 + 2*(utf8.RuneCountInString(values["videoid"])-2)
45
- if utf8.RuneCountInString(image_url) > predict_long {
46
- image_url += ".L"
47
- }
48
- var xml_videoid, _ = xml_search(xml_string, "video_id")
49
- var title, _ = xml_search(xml_string, "title")
50
- var description, _ = xml_search(xml_string, "description")
51
- var length, _ = xml_search(xml_string, "length")
52
- var view_count, _ = xml_search(xml_string, "view_counter")
53
- var comment_count, _ = xml_search(xml_string, "comment_num")
54
- var mylist_count, _ = xml_search(xml_string, "mylist_counter")
55
- var publish_time, _ = xml_search(xml_string, "first_retrieve")
56
- var embedable, _ = xml_search(xml_string, "embeddable")
57
- var genre, _ = xml_search(xml_string, "genre")
58
- ret_json_data := make(map[string]string)
59
- ret_json_data["video_id"] = xml_videoid
60
- ret_json_data["image"] = image_url
61
- ret_json_data["status"] = "success"
62
- ret_json_data["videoid"] = xml_videoid
63
- ret_json_data["title"] = title
64
- ret_json_data["description"] = description
65
- ret_json_data["length"] = length
66
- ret_json_data["view_count"] = view_count
67
- ret_json_data["comment_count"] = comment_count
68
- ret_json_data["mylist_count"] = mylist_count
69
- ret_json_data["publish_time"] = publish_time
70
- ret_json_data["embedable"] = embedable
71
- ret_json_data["genre"] = genre
72
- op, _ := json.MarshalIndent(ret_json_data, "", " ")
73
- fmt.Printf("Content-Type: application/json\n\n%s", op)
74
- }