[techブログ] zennとqiitaで投稿した記事タイトルとURLをワンライナーで取得!
対象読者
- zennで投稿記事分析をGoogle Analyticsで分析する人
- 上記対象の内、データをダウンロードをした後にURLとタイトルのマッピングがしたい人
- 当記事内容に興味がある方
前提
zennをGoogle Analyticsに連携した後にAnalyticsからデータをダウンロードすると以下のようなURL毎のアクセス集計されたデータが取得できます。
このurlとタイトルのマッピングを手動で毎回するのがめんどくさいなという事で、何かいいやり方ないかとwebでくぐってみました。
pythonでは以下、
Next.jsでは以下、
の記事は見つかりましたが、専用の環境作るのは若干面倒です。
利用者は少なさそうですが、どうせならワンライナーで動く環境一式を作って公開しました。
尚、zennのAPIは現状あくまでzenn.dev内部用として公開されているようですので、突然の変更などの可能性はあります。
やり方
以下のリポジトリをcloneなどしてきてください。
docker-compose.ymlの中のzennとqiita用のユーザー名を設定してください。
zennだけ利用する場合はqiitaの環境変数設定は削除。
qiitaだけ利用する場合zennの環境変数設定は削除します。
environment:
ZENN_USER_NAME: your_name
QIITA_USER_NAME: your_name
後はワンライナーコマンドを実行するだけです。
docker-compose up -d --build && docker-compose exec node-dev npm install && docker-compose exec node-dev npm run dev
実行結果の例として以下のような出力が得られます。
[INFO] 05:23:11 ts-node-dev ver. 2.0.0 (using ts-node ver. 10.9.1, typescript ver. 4.9.4)
zenn: output start >>>>>>>>>>>>>>>>>>>>>>>>>>
/chiku_dev/articles/7c6760fb34e894 【セキュリティ】モバイルルーターの通信方式にはWPA3を設定して、念の為MAC Addressフィルタリングも使おう
/chiku_dev/articles/6e2c9c802c84d6 Chrome拡張機能を紹介!
/chiku_dev/articles/5b2ac9e604f87f [2023] Web開発者おすすめのモダンなツールの紹介!
/chiku_dev/articles/beb0847136113d 爆速爆安の正規表現サービスの構築(React + Firestore + Rails)
/chiku_dev/articles/6304e03358a6ad 海外のTechメディアから技術情報を収集する
/chiku_dev/articles/a5122037d9080e RustのWasmでDOM操作、Canvas操作、API操作のサンプルを作ってみた
/chiku_dev/articles/c9863e988f0f8f Reactの設計手法について調べてみた
/chiku_dev/articles/632bc79a47d372 Rails API + Firestore Local Emulator 開発の雛形
/chiku_dev/articles/4cbde2f1115db0 Rails AWS DynamoDBの使用
/chiku_dev/articles/29ae4b8afa6fd4 Rails API (Docker) の作成
zenn: output end <<<<<<<<<<<<<<<<<<<<<<<<<<<<
qiita: output start >>>>>>>>>>>>>>>>>>>>>>>>>>
/chiku_dev/items/713912e32c1a3ab98e73 Windows 10(WSL2) vs Ubuntu パフォーマンス計測
/chiku_dev/items/df5258cd36761f565817 単位根(ADF)検定と分数次差分
/chiku_dev/items/e30475179724241a6f34 Python 3 エンジニア認定データ分析試験の対策
/chiku_dev/items/d18593e47b064d61f385 VSCodeからPyCharmへ移行
qiita: output end <<<<<<<<<<<<<<<<<<<<<<<<<<<<
得られた出力はタブ区切りとなっていますので、ターミナルから出力をコピーして、一旦テキストエディアにコピー。テキストエディタから出力対象を再度コピーしてスプレッドシートに貼り付けます。
Analyticsから出力されたシートにタイトル列を追加してvlookupでパスからタイトルを取得します。
vlookup例)
=VLOOKUP(B2&"*",tool_output!$B$1:$C$10,2, FALSE)
ちなみに#N/Aとなっている列は削除した記事と計測パスの後半に余計なものが付与されている為になります。 /chiku_dev/articles/017fef9df9b60f?twclid=2-4o484rfjponn82ptktokfh6ha
実行コードはシンプルでこれだけです。
import Parser from "rss-parser"
import 'dotenv/config'
const ZENN_URL = 'https://zenn.dev'
const QIITA_URL = 'https://qiita.com'
const getTitleAndPath = (feed: any, replaceUrl: string): Array<any> => {
if (!feed || !feed.items) throw new Error(`no feed: ${replaceUrl}`);
return feed.items.map((record: any) => {
return {
title: record?.title || 'empty title',
path: (record?.link || 'empty title').replace(replaceUrl, ''),
}
})
}
const outputTitleAndPath = (target: string, records: Array<any>) => {
if (!records) throw new Error(`no title and path: ${target}`);
console.log(`${target}: output start >>>>>>>>>>>>>>>>>>>>>>>>>>`)
records.forEach((record: any) => {
console.log(record.path + "\t" + record.title)
})
console.log(`${target}: output end <<<<<<<<<<<<<<<<<<<<<<<<<<<<`)
console.log('')
}
(async () => {
const parser = new Parser()
// @ts-ignore
if (process.env.ZENN_USER_NAME) {
// @ts-ignore
const feedForZenn = await parser.parseURL(`${ZENN_URL}/${process.env.ZENN_USER_NAME}/feed`)
const resultsByZenn = getTitleAndPath(feedForZenn, ZENN_URL)
outputTitleAndPath('zenn', resultsByZenn)
}
// @ts-ignore
if (process.env.QIITA_USER_NAME) {
// @ts-ignore
const feedForQiita = await parser.parseURL(`${QIITA_URL}/${process.env.QIITA_USER_NAME}/feed`)
const resultsByQiita = getTitleAndPath(feedForQiita, QIITA_URL)
outputTitleAndPath('qiita', resultsByQiita)
}
})();
ご活用下さい!
参考
Discussion