1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Evernote APIで画像URLから画像投稿する(Node.js)

Last updated at Posted at 2018-10-05

はじめに

この記事ではEvernote APIを利用して、画像URLから画像データをEvernoteに投稿するソースコードを紹介します。

テキストデータを投稿したい場合は、前回の記事をご覧ください。

ソースコード

Sandbox環境のEvernoteに画像データを投稿するソースコードです。
対象とする画像データには、前回の記事で取得していたTumblrの投稿データを用いました。

Evernote APIのDeveloper Tokenを取得していない方は、以下のページより取得してください。

以下、ソースコード。

postImg2Evernote.js
var Evernote = require('evernote'),
    fs = require('fs'),
    sleep = require('system-sleep'),
    request = require('sync-request'),
    crypto = require('crypto');

var DEVELOPER_TOKEN = "**********";

var option = { token: DEVELOPER_TOKEN, sandbox: true },
    client = new Evernote.Client(option),
    noteStore = client.getNoteStore();

// Read post data files in data dir
var dataDirPath = './data/';
fs.readdir(dataDirPath, function(err, fileNameList){
    if (err) throw err;
    // handle each post data
    fileNameList.forEach(fileName => {
        var jsonData = fs.readFileSync(dataDirPath + fileName, 'utf-8');
        JSON.parse(jsonData).posts.forEach(post => {
            // Post to Evernote if img post
            if(post.type === "photo") {
                createNote(post.summary, post.photos);
            }
        });
    });
});

// Upload post to Evernote
function createNote(postTitle, postImgs) {

    // Set ENML(Evernote Markup Language)
    var nBody = '<?xml version="1.0" encoding="UTF-8"?>';
    nBody += '<!DOCTYPE en-note SYSTEM "http://xml.evernote.com/pub/enml2.dtd">';
    nBody += "<en-note>";

    var resources = [];

    if(postImgs.length > 0) {

        postImgs.forEach(imgInfo => {
            
            var imgPath = imgInfo.original_size.url;

            // Get data type
            if(imgPath.indexOf('.jpg') != -1 || imgPath.indexOf('.JPG') != -1 || imgPath.indexOf('.jpeg') != -1 || imgPath.indexOf('.JPEG') != -1) var dataType = "image/jpeg";
            else if(imgPath.indexOf('.png') != -1 || imgPath.indexOf('.PNG') != -1) var dataType = "image/png";
            else if(imgPath.indexOf('.gif') != -1 || imgPath.indexOf('.GIF') != -1) var dataType = "image/gif";

            // Get "Resouce"
            var resource = getResource(dataType, imgPath);
            resources.push(resource);

            // Set "Resouce" hash
            var md5 = crypto.createHash('md5');
            md5.update(resource.data.body);
            var hexhash = md5.digest('hex');
            nBody += "<en-media type=\"" + resource.mime + "\" hash=\"" + hexhash + "\" /><br />";
        });

        nBody += "</en-note>";
    }
    else { nBody += "</en-note>"; }

    // Create note object
    var ourNote = new Evernote.Types.Note();
    ourNote.title = postTitle;
    ourNote.content = nBody;
    ourNote.notebookGuid = "*****";  // evernote notebook guid
    if(resources.length > 0) ourNote.resources = resources;

    // Create Note by createNote method
    noteStore.createNote(ourNote).then(function(note) {
        console.log("Posted: " + note.title);
    }).catch(function (err) {
        console.log(err);
    });

    sleep(5000);  // Wait 5 seconds
}

// Get image & Set to Evernote format
function getResource(dataType, imgPath) {

    // get img data via async request
    var response = request('GET', imgPath);

    // set img data to evernote format
    var data = new Evernote.Types.Data();
    data.body = response.body;

    // add img data info
    var resource = new Evernote.Types.Resource();
    resource.mime = dataType;
    resource.data = data;

    // add img file name
    var attr = new Evernote.Types.ResourceAttributes();
    attr.fileName = imgPath.match(".+/(.+?)([\?#;].*)?$")[1];
    resource.attributes = attr;

    return resource;
}

参考サイト

実行結果

前回の記事で取得していたTumblr APIの投稿データを対象に実行した結果は、以下の通りです。

コマンドライン

$ node postImg2Evernote.js
Posted: 「モチ肌」/「カナヘイ」のイラスト [pixiv]
Posted: 「くつろぎタイム」/「カナヘイ」のイラスト [pixiv]
Posted: 「タイムハート」/「やじるし」のイラスト [pixiv]
...
..
.

ソースコードを実行すると、画像URLをまとめたJSONから次々とEvernoteに画像を投稿し始めます。

Evernoteマイページ

ソースコード実行後、Evernoteのマイページにも次々と画像が投稿されていきます。
Evernote API、覚えると便利ですね...。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?