0

我正在使用 Google Scripts 来获取电子邮件的正文。我试图让它只保存包含在普通 YouTube 电子邮件中的链接,它会通知您来自新用户的上传。我想,使用 JavaScript 仅保存单击电子邮件中包含的图像时所遵循的链接。下面是电子邮件部分外观的示例:

电子邮件样本

邮件内容是这样的:

    <div>
<table width="620" cellspacing="0" cellpadding="0" border="0" align="center"><tr><td bgcolor="#F0F0F0">
<table width="578" cellspacing="0" cellpadding="0" border="0" align="center">
<tr>
<td height="16"></td>
</tr>
<tr>
<td align="center" valign="top">
<img src="http://s.ytimg.com/yt/img/email/digest/email_header.png">
</td>
</tr>
<tr>
<td height="16"></td>
</tr>
<tr>
<td align="left" bgcolor="#FFFFFF">
<div style="border-style:solid;border-width:1px;border-color:#cccccc">
<table width="578" cellspacing="0" cellpadding="0" border="0" align="center">
<tr>
<td height="22" colspan="3"></td>
</tr>
<tr>
<td width="40"></td>
<td width="498">
<table cellspacing="0" cellpadding="0" border="0">
<tr>
<td bgcolor="#FFFFFF" align="left" width="50">
<img src="https://i.ytimg.com/i/N5jZlcpSP00e_zShDw9EfQ/1.jpg" height="50" width="50">
</td>
<td width="16"></td>
<td>
<div style="font-family:arial,Arial,sans-serif;font-size:18px;color:#333333;line-height:24px" height="59">
FatalDubstepHD has uploaded <b>Empressto - No Love [Dubstep]</b>.
</div>
</td>
</tr>
</table>
<table cellspacing="0" cellpadding="0" border="0">
<tr><td height="22"></td></tr>
</table>
<div style="border-bottom:1px solid #e1e1e1"></div>
<table cellspacing="0" cellpadding="0" border="0">
<tr><td height="22"></td></tr>
</table>
<table cellspacing="0" cellpadding="0" border="0" style="width:480px;margin:0 9px">
<tr>
<td>
<a href="http://www.youtube.com/watch?v=zTYri0ei45Q&amp;feature=em-uploademail" style="text-decoration:none;display:block" class="nonplayable" target="_blank">
<img src="http://i2.ytimg.com/vi/zTYri0ei45Q/hqdefault.jpg" height="360" width="480" border="0">
</a>
</td>
</tr>
<tr><td height="16"></td>
</tr>
<tr>
<td width="480">
<a href="http://www.youtube.com/watch?v=zTYri0ei45Q&amp;feature=em-uploademail" style="text-decoration:none" target="_blank">
<div style="font-family:arial,Arial,sans-serif;font-size:15px;color:#333333;line-height:20px;font-weight:bold">
Empressto - No Love [Dubstep]
</div>
</a>
<div style="font-family:arial,Arial,sans-serif;font-size:13px;color:#999999;line-height:20px">
by
<a href="http://www.youtube.com/user/FatalDubstepHD?feature=em-uploademail" style="font-size:13px;color:#999999;line-height:20px;text-decoration:none" target="_blank">FatalDubstepHD</a>
</div>
</td>
</tr>
</table>
<table cellspacing="0" cellpadding="0" border="0">
<tr><td height="16"></td></tr>
</table>
<table cellspacing="0" cellpadding="0" border="0">
<tr>
<td width="498">
<div style="font-family:arial,Arial,sans-serif;font-size:13px;color:#333333;line-height:20px">
● Free Download<br><a href="https://soundcloud.com/empresstoro/empressto-no-love" target="_blank">https://soundcloud.com/<WBR>empresstoro/empressto-no-love</a><br><br>● Empressto <br><a href="http://www.facebook.com/EmpreSSto" target="_blank">http://www.facebook.com/<WBR>EmpreSSto</a><br><a href="http://www.twitter.com/Empressto" target="_blank">http://www.twitter.com/<WBR>Empressto</a><br><a href="http://www.youtube.com/user/TheOfficialEmpressto" target="_blank">http://www.youtube.com/user/<WBR>TheOfficialEmpressto</a><br><br>● Fatal Dubstep<br><a href="http://www.facebook.com/FatalMusicUK" target="_blank">http://www.facebook.com/<WBR>FatalMusicUK</a><br><a href="http://www.twitter.com/FatalMusicUK" target="_blank">http://www.twitter.com/<WBR>FatalMusicUK</a><br><br>● Owner Of Fatal<br><a href="http://www.twitter.com/Mihalis_Costa" target="_blank">http://www.twitter.com/<WBR>Mihalis_Costa</a><br><br>● Contact Email/Submit Music<br><a href="mailto:fatalmusicsubmission@gmail.com" target="_blank">fatalmusicsubmission@gmail.com</a>
</div>
</td>
</tr>
</table>
</td>
<td width="40"></td>
</tr>
<tr>
<td height="22" colspan="3"></td>
</tr>
</table>
</div>
</td>
</tr>
<tr>
<td height="16"></td>
</tr>
<tr>
<td align="center">
<table cellspacing="0" cellpadding="0" border="0" align="center">
<tr>
<td width="40"></td>
<td width="498">
<div style="color:#999999;line-height:14px;font-size:11px;font-family:arial,Arial,sans-serif">
You were sent this email because you chose to receive updates about new videos uploaded by <a href="http://www.youtube.com/user/FatalDubstepHD?feature=em-uploademail" style="text-decoration:none;color:#1c62b9" target="_blank">FatalDubstepHD</a>. If you don&#39;t want these updates anymore, you can change your preferences by visiting the <a href="http://www.youtube.com/subscription_manager" style="text-decoration:none;color:#1c62b9" target="_blank">subscription manager</a>.
</div>
</td>
<td width="40"></td>
</tr>
</table>
</td>
</tr>
<tr>
<td height="16"></td>
</tr>
<tr>
<td>
<table cellspacing="0" cellpadding="0" border="0" align="center">
<tr>
<td width="40"></td>
<td width="498">
<div style="color:#999999;font-size:11px;line-height:14px;font-family:arial,Arial,sans-serif">
©2013 YouTube, LLC 901 Cherry Ave, San Bruno, CA 94066
</div>
</td>
<td width="40"></td>
</tr>
</table>
</td>
</tr>
<tr>
<td height="22"></td>
</tr>
</table>
</td></tr></table>
</div>

这里的问题是,我如何从这样的电子邮件中过滤掉 url,而且看起来文本3D被添加到 url,这使得 url 无效,所以我还需要从网址。关于我如何做到这一点的任何想法?

编辑:

这是我正在使用的代码,它缺少解析数据:

function processInbox() {
  // get all threads in inbox
  var label = GmailApp.getUserLabelByName("Social/YouTube/Dubstep");
  var doneLabel = GmailApp.getUserLabelByName("Social/YouTube/Dubstep (added)");
  var messages = label.getThreads();
  var max = Math.min(messages.length,1);
  for( var i = 0; i < max; ++i ) {
    var email = messages[i].getMessages()[0];
    var contents = email.getBody();

    //PARSE HERE
    var xml = Xml.parse(contents,true);
    Logger.log(xml);
    GmailApp.sendEmail('MY EMAIL', 'Xml Contents', Logger.getLog());



    //messages[i].markRead();
    //messages[i].removeLabel(label).addLabel(doneLabel);
  }
};

EDIT2:新代码:

function processInbox() {
  // get all threads in inbox
  var label = GmailApp.getUserLabelByName("Social/YouTube/Dubstep");
  var doneLabel = GmailApp.getUserLabelByName("Social/YouTube/Dubstep (added)");
  var messages = label.getThreads();
  var max = Math.min(messages.length,5);
  for( var i = 0; i < max; ++i ) {
    var email = messages[i].getMessages()[0];
    var contents = email.getBody();
    var st = contents.indexOf('<a href="http://www.youtube.com/watch?v=');
    var str1 = contents.substr(st+9,80);
    var end = str1.indexOf('&amp');
    var link = str1.substring(0,end);
    Logger.log(link); 
    GmailApp.sendEmail('EMAIL', 'Xml Contents', Logger.getLog());

    Logger.clear();

    //messages[i].markRead();
    //messages[i].removeLabel(label).addLabel(doneLabel);
  }
4

1 回答 1

1

我想最好的方法是使用XML service来解析 HTML 并从那里获取元素。

请参阅此处的文档,将 lenient 参数设置为true

我前段时间在这篇文章中使用了类似的方法,你可以看到这个想法......


编辑: 我没有成功使用这种方法......我尝试了使用字符串操作的其他方法:

...
var contents = email.getBody();
var st = contents.indexOf('<a href="http://www.youtube.com/watch?v=');
var str1 = contents.substr(st+9,80);
var end = str1.indexOf('&amp');
var link = str1.substring(0,end);
Logger.log(link);    

它适用于这种情况,您必须检查它是否一直有效。

注意:我测试了从 YouTube 通过电子邮件发送的其他共享链接,它似乎每次都有效;-)

于 2013-03-09T22:15:46.003 回答