アプリ版:「スタンプのみでお礼する」機能のリリースについて

Google Apps Script で、Web上の動画.mp4 の “長さ” を取得できますか?

質問者からの補足コメント

  • "openByUrl" でオープンできるファイルは決まっているようですね。

    Search results for "openByUrl"  |  Google Developers
    https://developers.google.com/s/results/apps-scr …

    Class SpreadsheetApp  |  Apps Script  |  Google Developers
    https://developers.google.com/apps-script/refere …

    スプレッドシートを取得するには、SpreadsheetApp.openByUrl(URL);
    となるようですね。スプレッドシートのファイル名を取得できました。

    No.3の回答に寄せられた補足コメントです。 補足日時:2021/02/10 09:23

A 回答 (4件)

No3です



No3だと仮想のHTMLオブジェクトが対象かもしれないので・・・
このあたりも参考になるのではないかと思います。
(こちらではテストできないので、外しているかもしれませんが…)
https://tonari-it.com/gas-button-event-javascript/
https://tonari-it.com/gas-web-app-google-script- …
https://nmmmk.hatenablog.com/entry/2018/10/14/00 …
    • good
    • 0
この回答へのお礼

HTMLドキュメントがあったり目的がよくわからなかたり、自分にはよくわかりません。申し訳ありません。

お礼日時:2021/02/10 09:34

No2です



少し時間があったので、ちょっとだけ調べてみましたが、GASでもdocumentオブジェクトの利用が可能なようです。
https://tonari-it.com/gas-document-get/
https://qiita.com/Rihoritsuko/items/a520a7093846 …

このdocument上で、通常のDOM操作が可能かどうかまでははっきりしませんが(私は試してみることができないのですが)、なんとなくできそうな気がしますけれど・・・
この回答への補足あり
    • good
    • 1
この回答へのお礼

回答ありがとうございます。
function logDocument() {

const DOC_URL = '*****コピーしたドキュメントのURL*****';
const doc = DocumentApp.openByUrl(DOC_URL);
console.log(doc.getName());
console.log(doc.getBody().getText());

}
---以下の行でそれぞれエラー
const doc = DocumentApp.openByUrl(DOC_URL);

・Google スプレッドシート
エラー:Exception: Document is missing (perhaps it was deleted, or you don't have read access?)
・Google テキストファイル
エラー:Exception: Invalid argument: url
・Google ドライブ内の動画の共有リンク
エラー:Exception: Invalid argument
・Web上のMP4動画
エラー:Exception: Invalid argument: url
・Google ドキュメント
正常終了

Google ドキュメント のみ “ファイル名” と “本文” が表示されました。

お礼日時:2021/02/10 09:14

No1です



>ReferenceError: document is not defined
あらら・・
もしかするととは思いましたが、GASにはDOMが存在しないのかなぁ?
GASの場合は、スクリプトはサーバサイドで実行されているのでしょうか?
GoogleMAPのAPIなどだと、HTML上で実行されるので、それと同じではないかと期待したのですが…

No1のスクリプトは、通常のHTML上でDOMに
 <video>
  <source src="対象mp4" />
 </video>
を生成することで、読み込ませてメタデータからサイズを取得するものです。

>全体の秒数は、どの変数に入るのでしょうか?
video.duration です。
(durationはプロパティなので、「()」は不要です)


DOMが利用できないようですので、ファイルを直接読み込んで解析するとか、面倒なことになってしまいそうですね。
あるいは、ブラウザのdocumentにアクセスする方法があれば、No1の方法が使えるのではないかと思いますが、GASを存じていませんので、そのあたりのGASの根本がわかりません。
ユーザ定義の外部関数などは、document上で処理されたりしてはいないのでしょうか?
あるいは、通常のスクリプトと連携させる方法などは用意されていないのでしょうか?

そのあたりに関しては、まったく知識がないので、あまりお役に立てそうにもありません。
失礼いたしました。
    • good
    • 0
この回答へのお礼

GAS のYouTubeをあげてる人に手あたり次第、質問を投げてみたところ、いくつか返信がつきました。
https://www.youtube.com/attribution_link?a=5ZcPL …
> 私も取り扱ったことはないのですが、恐らくgoogleVideoIntelligence APIなどの動画を解析できるサービスのAPIと連携できるかと思います。

https://www.youtube.com/attribution_link?a=TD27Q …
> Google Driveに一旦ダウンロードすれば可能ですが、URLから直接長さを取得するのは無理そうな気がします。 ちなみYouTubeの動画ならYouTubeのAPIで動画の長さを取得できます。

https://www.youtube.com/attribution_link?a=iGtfW …
> GASというよりJS周りの話になるかと思います!
> https://shanabrian.com/web/javascript/video-dura …

お礼日時:2021/02/10 09:53

こんばんは



動画要素が取得できていれば、durationプロパティで全体の秒数を取得できると思われますが、動画自体を読み込むのには時間がかかる可能性があります。
https://developer.mozilla.org/ja/docs/Web/HTML/E …

durationプロパティが取得できない場合はダメですが、一応、以下でテストしてみたところ、設定されていれば取得できるものと思います。
(メタデータの読込みを待ちますので、数秒程度かかるかもしれません。)

以下は、Apps Scriptの機能は全く利用していませんけれど・・・
(私が、Apps Scriptの機能を知りませんので)

const src = 'https://hogehoge.mp4'; // ←mp4のURL

const video = document.createElement('video');
video.preload = true;
video.addEventListener('loadedmetadata', ()=>{ alert( video.duration ); });
video.innerHTML = '<source src="' + src + '" type="video/mp4" />';
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
const video = document.createElement('video'); の行で次のエラーが出ます。
ReferenceError: document is not defined
全体の秒数は、どの変数に入るのでしょうか?
video.duration() でしょうか?

お礼日時:2021/02/09 09:51

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!