質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.44%
Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Gmail

GmailとはGoogleによって提供されているウェブメールのサービスのことです。

Q&A

解決済

1回答

308閲覧

特定メールの添付動画のリンクを取得して、スプレッドシートに出力したいのですが、理想通りの動きではありません。どうしたらいいかわかりません。

ISPEI

総合スコア12

Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Gmail

GmailとはGoogleによって提供されているウェブメールのサービスのことです。

0グッド

0クリップ

投稿2023/03/11 07:28

実現したいこと

GASを使い、特定メールの添付動画のリンクを取得して、スプレッドシートに出力したい

発生している問題・エラーメッセージ

エラーはないですが、期待通りの結果になりませんでした。.pngもしくは後半のjava.lang~がリンクだと思いますが、普通にアクセスできるようなリンクで出力したいのに、できません。特に記述しませんでしたが、そのほかの情報は問題なく出力できてます。

252ef79c-5c5f-43d5-ac53-c28b99d7b930_0_inline.jpg,wsc_mail_watchvideo_inline.png [Ljava.lang.Object;@1119192f e7793d6a-9ecc-4aa3-a7b6-74d435a8a8d3_0_inline.jpg,wsc_mail_watchvideo_inline.png [Ljava.lang.Object;@9a955ec 3fc904a3-a968-46a0-a808-a9a10fd9ffe0_0_inline.jpg,wsc_mail_watchvideo_inline.png [Ljava.lang.Object;@27cd304 0fee03fa-0b9c-436f-bd1b-4c2adce64f05_0_inline.jpg,wsc_mail_watchvideo_inline.png [Ljava.lang.Object;@2c8ede0c 76b26705-9176-4d50-be0b-c84751cfa724_0_inline.jpg,wsc_mail_watchvideo_inline.png [Ljava.lang.Object;@41eb71c6 f55bfeb5-bc6f-4dbc-a629-31ca16731144_0_inline.jpg,wsc_mail_watchvideo_inline.png [Ljava.lang.Object;@43b86d93 400bb5b3-e9be-4138-afa4-ccd844c8b17c_0_inline.jpg,wsc_mail_watchvideo_inline.png [Ljava.lang.Object;@21e36de9 e2b7935d-0a08-4264-9a8c-e76e6704bf65_0_inline.jpg,wsc_mail_watchvideo_inline.png [Ljava.lang.Object;@f247873 ab631f88-06d3-471b-b5a3-05bbd5770573_0_inline.jpg,wsc_mail_watchvideo_inline.png [Ljava.lang.Object;@615f228f ff87228c-10b4-4c54-aba6-ce6deacada0e_0_inline.jpg,wsc_mail_watchvideo_inline.png [Ljava.lang.Object;@28cb6ab7 8969a42a-1c33-4d20-a127-9a9fcf56d51b_0_inline.jpg,wsc_mail_watchvideo_inline.png [Ljava.lang.Object;@64b11a1d a48d32e5-3c4b-4a78-983a-4c01ac472c10_0_inline.jpg,wsc_mail_watchvideo_inline.png [Ljava.lang.Object;@7d95cebf

該当のソースコード

GAS

1function searchMails() { 2 3 var url = "Gmailメールボックスアドレス"; 4 var html = UrlFetchApp.fetch(url).getContentText(); 5 const query = '指定条件:3d'; 6 const threads = GmailApp.search(query); 7 var parse = Parser.data(html); 8 9 10 // 書き出しを行うスプレッドシートとそのシート 11 const ss = SpreadsheetApp.getActiveSpreadsheet(); 12 const sheet = ss.getSheetByName('シート1'); 13 14 threads.forEach(thread => { 15 16 const messages = thread.getMessages(); 17 18 messages.forEach(message => { 19 20 let fromData = message.getFrom(); // 送信元 21 let subject = message.getSubject(); // 件名 22 let body = message.getPlainBody(); // 本文 23 let attachments = message.getAttachments(); // 添付ファイル群(配列) 24 let links = parse.from('<a href="').to('">').iterate(); 25 let attachmentList = []; // 添付ファイルのファイル名格納用の配列 26 27 if(attachments.length > 0){ 28 attachments.forEach(attachment => { 29 30 let name = attachment.getName(); 31 32 attachmentList.push(name); 33 }); 34 } 35 36 attachmentList = attachmentList.join(','); 37 38 let data = [fromData, subject, body, attachmentList,links]; 39 40 // 書き出し(行追加)実行 41 sheet.appendRow(data); 42 43 }); 44 }); 45}

試したこと

Parserライブラリーで取得を試みましたが、上記の結果になりました。そのほか.getUrlや.getDownloadUrlも試しましたが、関数ではないというエラーが出た為断念しました。

補足情報(FW/ツールのバージョンなど)

参考にしたサイトです。
https://web.biz-prog.net/gas/gethtml.html#parse

https://auto-worker.com/blog/?p=2460#

https://for-dummies.net/gas-noobs/gas-japanese-reference-for-gmail/

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

GAS

1function searchMail() { 2 const today = new Date(); 3 const year = today.getFullYear(); 4 const month = ("0" + (today.getMonth() + 1)).slice(-2); 5 const day = ("0" + today.getDate()).slice(-2); 6 const todayStr = year + '/' + month + '/' + day; 7 // Gmailの検索条件 8 const query = 'from:メールアドレス newer_than:1d'+ todayStr;; 9 // 検索実行 10 const threads = GmailApp.search(query); 11 // 出力用のスプレッドシート 12 const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('シート名'); 13 // 検索されたスレッドのループ 14 threads.forEach(thread => { 15 // スレッド内のメッセージのループ 16 thread.getMessages().forEach(message => { 17 // メッセージのHTMLを取得 18 const html = message.getBody(); 19 // HTMLパース用のライブラリのインスタンスを生成 20 const parse = Parser.data(html); 21 // メッセージ内の添付ファイルのリストを取得 22 const attachments = message.getAttachments(); 23 // 添付ファイルの名前をカンマ区切りの文字列に変換 24 const attachmentList = attachments.map(a => a.getName()).join(','); 25 // HTML内の添付ファイルリンクを取得 26 const links = parse.from('<a href="').to('"').iterate().map(link => link.replace(/&amp;/g, '&')); 27 // 出力するデータ 28 const data = [message.getFrom(), message.getSubject(), message.getDate(), attachmentList, links.join('\n')]; 29 // データを書き込む 30 sheet.appendRow(data); 31 }); 32 }); 33}

上記のコードに修正したら無事自動検索、抽出、出力してくれました。

・原因
そもそもHTMLから取るのは少し無理がありましたので、直接本文からリンクを取りました。また、条件を差出人アドレスと今日のみを指定することで、無事に抽出することができました。

投稿2023/03/18 06:37

ISPEI

総合スコア12

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.44%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問