日本語で流し読むastro-ph

前日にarXivに登録された論文のアブストを機械翻訳してお届けします(毎日15時台に更新)

【お知らせ】本日を持ちまして更新を終了します。

数年間運用してまいりましたが、本日を持ちまして更新を修了いたします。
どなたかの研究生活が少しでも楽になっていたならば嬉しいです。

なお、このブログの更新は、Gmail に届いた arXiv からのアラートメールを Google App Script を使ってはてなブログにポストする、という方法を取っていました。
スクリプトを載せておきますのでもし必要な方はご活用くださいませ。

ありがとうございました。

function main(){
    var txt = getEMail();
    if(txt) sendEMail(txt);
}

function getEMail(){
    var today = Utilities.formatDate(new Date(), "Asia/Tokyo", "yyyy/MM/dd");
    
    // 今日配信の最新メールスレッドを取得
    var query = 'from:no-reply@arxiv.org subject:"physics daily Subj-class mailing" after:' + today.toString();
    var threads = GmailApp.search(query);
    
    var result = [];
    
    // メールがあれば中身をパース
    if (threads.length){
        var mails = threads[0].getMessages();
        
        // メール本文の`%%--%%--`までを抽出(それよりあとはリバイス情報)し、さらに、`----`を目印に一つ一つの論文ブロックにsplit
        var papers = mails[0].getBody().match(/([\s\S]*)%%--%%--%%--%%--%%--%%--%%--%%--%%--%%--%%--%%--%%--%%--%%--%%--%%--%%--%%--%%/)[1].split('------------------------------------------------------------------------------');
       
        // タイトルに利用する時間情報を抽出
        var header = papers[4].match(/from([\s\S]*)$/)[1].replace(/\n|\r\n|\r/g, '').replace(/to/,'--');
        result.push(header);
        
        // 各論文ブロックにつき、中身を適当に分解。タイトルとアブストはLanguageAppで和訳
        for(var i = 6; i < papers.length; i++){
        // for(var i = 8; i <= 9; i++){
            var parts = papers[i].split("\\\\");
            var no = parts[1].match(/arXiv:(\d{4}\.\d{5})/)[1];
            var title_en = parts[1].match(/Title: ([\s\S]*)\nAuthors/)[1].replace(/\n|\r\n|\r/g, '');
            var title_jp = LanguageApp.translate(title_en, "en", "ja" );
            var author = parts[1].match(/Authors: ([\s\S]*)\nCategories/)[1].replace(/\n|\r\n|\r/g, '');
            var abstract_en = parts[2].replace(/\r?\n/g, ' ');
            var abstract_jp = LanguageApp.translate(abstract_en, "en", "ja" ).replace(/\n|\r\n|\r/g, '');
            var link = parts[3];
            
            // [未解決]はてなブログでよくわからないところで改行されるので、暫定的に下記対応
            // 1 日本語アブストはスペース削除
            abstract_jp = abstract_jp.replace(/\s+/g, '');
            // 2 英語タイトルと著者名のスペースをアンスコで置換
            title_en = title_en.replace(/\s+/g, '_'),
            author = author.replace(/\s+/g, '_'),
            
            // 加工したデータを格納
            result.push([
                no,
                title_en,
                title_jp,
                author,
                abstract_jp,
            ]);
            // API呼び出し頻度に引っかからないようにちょっと待つ
            Utilities.sleep(1000);
        }
    return result;
    }
}

function sendEMail(txt){
    // 宛先
    var email_to = '<Your API Key>@blog.hatena.ne.jp';
    var email_cc = '<Your Email>';
    
    // メール件名(記事タイトル)
    var subject = txt[0];
    
    // メール本文(記事本文)
    var body = '[:contents]\n';
    for(var i = 1; i < txt.length; i++){
        body += '* ' + txt[i][2] + '\n';
        body += '|*Title|' + txt[i][1] + '|\n';
        body += '|*Authors|' + txt[i][3] + '|\n';
        body += '|*URL|[https://arxiv.org/abs/' + txt[i][0] + ']|\n';
        body += '>||\n' + txt[i][4] + '\n||<\n';
        body += '\n';
    }
    
    // 送信
    GmailApp.sendEmail(
	email_to,
	subject,
	body,
	{
            cc: email_cc
	}
    );
}