質問編集履歴

2

追記しました

2020/02/20 10:18

投稿

KojimaYuuki
KojimaYuuki

スコア24

test CHANGED
File without changes
test CHANGED
@@ -453,3 +453,7 @@
453
453
  旧ランタイムだと4.4MBほどまでしかアップロードできていませんでした。
454
454
 
455
455
  teratail初利用の為、質問の仕方に至らぬ点があったらすいません。
456
+
457
+
458
+
459
+ 追記:11MBほどまでアップロードできるようになりました。50MBまでアップロードできないのはなぜなのでしょうか。

1

変更点としては、urlfetchの実行間隔を開けたくらい?あと、URLを入力する部分を分離した。 11MB程度までアップロードができる。それ以下の動画は成功した。

2020/02/20 10:18

投稿

KojimaYuuki
KojimaYuuki

スコア24

test CHANGED
File without changes
test CHANGED
@@ -20,19 +20,21 @@
20
20
 
21
21
 
22
22
 
23
- ```google apps script
23
+ code.gs
24
+
25
+ ```
24
26
 
25
27
  //雑なコードですいません。お目汚し失礼します。
26
28
 
27
- function func(){
29
+ function download(id){
28
-
30
+
29
- //動画ID(直書き)
31
+ //メールアドレスとパスワードをベタ書き
30
-
32
+
31
- var id = "動画ID";
33
+ var mail = "メールアドレス", pass = "パスワード";
32
34
 
33
35
  //ユーザーセッションを取得
34
36
 
35
- var userSession = getUserSession("ID", "パスワード");
37
+ var userSession = getUserSession(mail, pass);
36
38
 
37
39
  //ユーザーセッションが取得できていたら
38
40
 
@@ -40,33 +42,55 @@
40
42
 
41
43
  Logger.log("session=" + userSession);
42
44
 
43
- //nicoHistoryを取得
45
+ Utilities.sleep(5000);
44
-
45
- //動画ページが読み込まれていないと、getFlvが403を返すため。
46
-
47
- //cookieでnicohistoryとuserSessionを渡すと動画情報が見れる。
48
46
 
49
47
  var nicohistory = getNicoHistory(id);
50
48
 
49
+ if(nicohistory){
50
+
51
+ Utilities.sleep(5000);
52
+
51
- //getflvを実行
53
+ //getflvを実行
52
-
54
+
53
- var data = getFlv(id, userSession, nicohistory);
55
+ var data = getFlv(id, userSession, nicohistory);
54
-
55
- //動画情報からURLを取得
56
+
56
-
57
- for(var i = 0; i < data.length; i++){
57
+ for(var i = 0; i < data.length; i++){
58
-
58
+
59
- var temp = data[i].split("=");
59
+ var temp = data[i].split("=");
60
-
60
+
61
- if(temp[0].match("url")){
61
+ if(temp[0].match("url")){
62
+
62
-
63
+ //URLを取得
64
+
63
- var url = unescape(temp[1]);
65
+ var url = unescape(temp[1]);
64
-
66
+
65
- Logger.log(url);
67
+ Logger.log(url);
68
+
66
-
69
+ Utilities.sleep(5000);
70
+
67
- //動画のblobを取得
71
+ //blobを取得
68
-
72
+
69
- return getBlob(url, userSession, nicohistory);
73
+ var blob = getBlob(url, userSession, nicohistory);
74
+
75
+ if(blob){
76
+
77
+ //アップロードする
78
+
79
+ var parentDir = "1hcyYh8HBVx8YRCN7LyMrL_sbMJXhMoXI";
80
+
81
+ var file = Drive.Files.insert({
82
+
83
+ title: "sm" + id,
84
+
85
+ parents: [{id: parentDir}]
86
+
87
+ }, blob);
88
+
89
+ return file.alternateLink;
90
+
91
+ }
92
+
93
+ }
70
94
 
71
95
  }
72
96
 
@@ -82,33 +106,11 @@
82
106
 
83
107
  function doGet() {
84
108
 
85
- //blobを取得
86
-
87
- var blob = func();
88
-
89
- var url = "失敗";
109
+ var htmlOutput = HtmlService.createTemplateFromFile("main").evaluate();
90
-
91
- if(blob){
110
+
92
-
93
- var parentDir = "フォルダID";
111
+ htmlOutput.setTitle("ニコ動DL");
94
-
95
- //アップロード
112
+
96
-
97
- var file = Drive.Files.insert({
98
-
99
- title: blob.getName(),
100
-
101
- parents: [{id: parentDir}]
102
-
103
- }, blob);
104
-
105
- url = file.alternateLink;
106
-
107
- }
108
-
109
- //結果を表示
110
-
111
- return HtmlService.createHtmlOutput(url);
113
+ return htmlOutput;
112
114
 
113
115
  }
114
116
 
@@ -340,16 +342,100 @@
340
342
 
341
343
  }
342
344
 
343
- // Blob取得
345
+ // リクエスト
344
-
346
+
345
- var resp = UrlFetchApp.fetch(url, options).getBlob();
347
+ var resp = UrlFetchApp.fetch(url, options);
348
+
346
-
349
+ var blob = resp.getBlob();
350
+
347
- return resp;
351
+ return blob;
348
352
 
349
353
  }
350
354
 
351
355
  ```
352
356
 
357
+  
358
+
359
+ main.html
360
+
361
+ ```
362
+
363
+ <!DOCTYPE html>
364
+
365
+ <html>
366
+
367
+ <head>
368
+
369
+ <base target="_top">
370
+
371
+ <style>
372
+
373
+ body {
374
+
375
+ background-color: #404040;
376
+
377
+ }
378
+
379
+ </style>
380
+
381
+ </head>
382
+
383
+ <body>
384
+
385
+ <input type="text" id="url" placeholder="動画URLを入力">
386
+
387
+ <button id="dlButton">ダウンロード</button>
388
+
389
+ <br>
390
+
391
+ </body>
392
+
393
+
394
+
395
+ <script>
396
+
397
+ var dlButton;
398
+
399
+ var inputUrl;
400
+
401
+
402
+
403
+ window.onload = function(){
404
+
405
+ dlButton = document.getElementById("dlButton");
406
+
407
+ inputUrl = document.getElementById("url");
408
+
409
+ dlButton.addEventListener("click", function(e){
410
+
411
+ var id = inputUrl.value.replace(/^.+sm/, "").replace(/?.+$/, "")
412
+
413
+ google.script.run.withSuccessHandler(function(val){
414
+
415
+ if(val){
416
+
417
+ alert("ダウンロード完了:" + val);
418
+
419
+ }else{
420
+
421
+ alert("読み込み失敗");
422
+
423
+ }
424
+
425
+ }).download(id);
426
+
427
+ alert("ダウンロード中:" + id);
428
+
429
+ });
430
+
431
+ };
432
+
433
+ </script>
434
+
435
+ </html>
436
+
437
+ ```
438
+
353
439
  「gas drive insert blob 制限」、「niconico getflv 止まる」などで検索してみたのですが原因が分からず、困っています。
354
440
 
355
441