1
0

JXA で note のお気に入り作者の記事一覧を csv 形式で保存する

Last updated at Posted at 2024-02-08

きっかけ

自分の note の記事とスキされた数を一覧で取得したいと思ったのがきっかけ。
調べてみると note はAPIが提供されていて、JSON 形式で取得できることが分かった。
私はMacユーザなので、慣れている JXA (JavaScript for Automation) で作成した。JXAは Apple Script の JavaScript 版のようなもの。

汎用的にして、好きな作者の記事一覧を

最初は自分用だったが、 note のユーザーIDを入力して、お気に入りの作者の一覧を取得できるようにして、ソースを公開することにしました。
出力項目は
"タイトル","スキされた数","公開日","記事へのリンク"
です。

ソースコード

備忘録も兼ねてソースを公開します。

NoteContent.scpt
// note.com から、好きな作者の記事一覧を csv 形式のファイルに出力します。
// 起動するとユーザーIDを聞いてきますので、NoteのユーザーIDを入力します。
// ファイル名は「ユーザーID_NoteContents.csv」で、デスクトップに出力されます。
// 内容は "ニックネーム","ノート記事数","フォロー数","フォロワー数" と
//      "タイトル","スキされた数","公開日","記事へのリンク" です。
//

var app = Application.currentApplication()
app.includeStandardAdditions = true

try {
    var res = app.displayDialog('出力するNoteのユーザーID', {
        defaultAnswer: 'YOUSER_ID'
    }).textReturned;
	} catch(e) {
	    throw new Error('ユーザーIDが取得できませんでした')
	}

const userID = res
const baseURL = '"https://note.com/api/v2/creators/' + userID

var URL = baseURL + '"'
var ans = app.doShellScript('curl -s ' + URL)

var jsonData = JSON.parse(ans)
var noteCount = jsonData.data.noteCount     // note 記事数

var contentsData = ''

// 作者情報 (不要なら記事情報まで削除)
contentsData += '"ニックネーム","ノート記事数","フォロー数","フォロワー数"\n'
contentsData += '"' + jsonData.data.nickname + '"'         // ニックネーム
contentsData += ',"' + noteCount + '"'                      // ノート記事数
contentsData += ',"' + jsonData.data.followingCount + '"'  // フォロー数
contentsData += ',"' + jsonData.data.followerCount + '"'   // フォロワー数
contentsData += ',\n"==============================="\n'

// 記事情報
contentsData += '"タイトル","スキされた数","公開日","記事へのリンク"\n'
for (let i = 1 ; i <= (noteCount / 6) + 1 ; i++) {
    URL = baseURL + '/contents?kind=note&page=' + i + '"'
    ans = app.doShellScript('curl -s ' + URL)
    jsonData = JSON.parse(ans)
    if (jsonData.data.contents == []) {
        app.displayDialog('no content')
     } else {
	     for (let j = 0 ; j < jsonData.data.contents.length ; j++) {
		     contentsData += '"' + jsonData.data.contents[j].name + '"'        // タイトル
			 contentsData += ',"' +jsonData.data.contents[j].likeCount + '"'   // スキ数
			 contentsData += ',"' + jsonData.data.contents[j].publishAt + '"'  // 公開日
			 //  記事へのリンク
			 contentsData += ',"https://note.com/' + userID + '/n/' + jsonData.data.contents[j].key + '"'
			 contentsData += '\n'
		 }
	 }    
}

path = app.pathTo("desktop",{from:"user domain"}) + "/" + userID + "_" + "NoteContents.csv"
try {
    f = app.openForAccess(path, {writePermission:true})
    app.setEof(f, {to:0})
    app.write(contentsData, {to:f, as:"text"})
} catch(e){
    console.log(e)
    app.displayAlert(e.toString())
} finally {
    app.closeAccess(f)
}

app.displayDialog('投稿記事数:' + noteCount + '件 出力完了しました。')

とりあえず動いたというレベルで、恥ずかしいコードですが公開しますので、ご意見・ご指摘をいただければ喜びます。

1
0
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
0