nodejs xml2js one-liner

このブログは Open Live Writer で書いてます。このエディターは自動でHREFリンクを埋め込む機能があります。

image

上の画面ショットの設定はXMLファイルに保存されます。こんな感じ。

$ head -5 /mnt/c/Users/$LOGNAME/AppData/Local/Packages/\
*.OpenLiveWriter_*/LocalCache/Roaming/OpenLiveWriter/LinkGlossary/linkglossary.xml
<?xml version="1.0" encoding="utf-8"?>
<glossary>
  <entry>
    <text>Open Live Writer site</text>
    <url>http://www.OpenLiveWriter.org</url>

Node の xml2js というXMLをJSONに変換してくれるmoduleで変換してみます。

var parser = new xml2js.Parser();

xml2js – npm

上のページのリンクした箇所を無理やり(笑) one-liner にしてみました。そして jq に渡します。

$ node -e \
  "var fs=require('fs'),xml2js=require('xml2js');
   fs.readFile(0,function(err,data){
     xml2js.Parser().parseString(data,function(err,result){
       console.log(JSON.stringify(result));});});" \
< /mnt/c/Users/$LOGNAME/AppData/Local/Packages/*.OpenLiveWriter_*/LocalCache/Roaming/OpenLiveWriter/LinkGlossary/linkglossary.xml |
jq -r '.glossary.entry[]|"\(.text[0])\t\(.url[0])"'
Open Live Writer site   http://www.OpenLiveWriter.org
Cloudera        https://www.cloudera.com/
Hue     http://gethue.com/
Apache Hadoop Yarn      http://hadoop.apache.org/docs/current/hadoop-yarn/hadoop-yarn-site/YARN.html
#gcpug  https://twitter.com/hashtag/gcpug?f=tweets&vertical=default&src=hash
#openshiftjp    https://twitter.com/hashtag/openshiftjp?f=tweets&vertical=default&src=hash
#k8sjp  https://twitter.com/hashtag/k8sjp?f=tweets&vertical=default&src=hash
弊社    https://jp.cloudera.com/
仕事    https://jp.cloudera.com/
会社    https://jp.cloudera.com/
本業    http://jp.cloudera.com/
社内    https://jp.cloudera.com/
#secjaws        https://twitter.com/hashtag/secjaws?f=live

Promise 使えばもっと短くなると思うので成功したらまた書きたいと思います。

YouTube APIでリスト作成

以下弊社YouTube チャネルです。

image

赤箱の VIDEOS をクリックすると一見緑の下線部のようにこのチャンネル内の全てのビデオが日付降順でリストされるように見えます。

ビデオが多くあると検索も面倒なので一覧リストを作ろうと思い立ちました。scraping でもJSONでデータが取れるようでしたがAPIでできるとの情報を以下に見つけました。

you can get all the videos from the channel with the search endpoint,

Getting all videos of a channel using youtube API – Stack Overflow

‘list’ を取りたいのに ‘search’ とはこれまた如何にと思いましたが深く考えずにやってみました。今から振り返るともっと検索してより完全なスクリプトを探せばよかったと思ってます。おそらく日本語の情報もあると思います。

さて今回はスクリプトを使わず bash でゴリゴリと curl を投げまくってjqでリストを作りました。この経緯はまた別途書きたいと思います。

最終結果は以下のようになりました。以下は2020年3月以降のものだけを表示してます。

2020-05-14T12:08 How to mask Hive columns using Atlas tags and Ranger?
2020-05-08T23:22 Cloudera Streaming Analytics (CSA)
2020-05-01T15:16 Streams Messaging Manager with Data Hub on CDP
2020-04-30T20:07 Discover Cloudera Data Platform
2020-04-23T18:51 Operational Database with HBase on Data Hub in CDP
2020-04-21T19:29 Data Engineering with Data Hub on CDP
2020-04-21T09:22 How to register an HDP cluster in DataPlane platform
2020-04-13T13:38 Delivering healthcare equity through real-time data science with tangible outcomes
2020-04-13T12:39 Cloudera in Healthcare and Life Sciences
2020-04-10T00:03 Cloudera in Insurance
2020-04-08T17:10 How to connect Nifi to Kafka in Data Hub on CDP
2020-04-07T22:12 Accessing Your DASK dashboard in Cloudera Machine Learning
2020-04-07T22:09 Using distributed Xgboost with DASK in Cloudera Machine Learning
2020-04-02T17:32 How to use Experiments in Cloudera Machine Learning
2020-03-31T15:24 Provisioning Workspaces in Cloudera Machine Learning
2020-03-31T14:22 How to set-up cross-realm trust between two secure clusters
2020-03-26T20:34 Rabobank Facilitates Financial Independence Through Real-Time Data Insights
2020-03-19T17:13 Cloudera Machine Learning – What You Should Know
2020-03-19T13:00 Quick Preview of Cloudera Data Platform on Azure
2020-03-11T17:31 From 0 to Query with Cloudera Data Warehouse in CDP

この結果は画面ショットと最初の方は一致してるのですが50個目ぐらいでYouTube web画面の方で抜けがあることがわかりました。

僕はこのチャンネルの管理者ではないので抜けたvideoに何か他と違う属性があったのかは確認できません。一般ユーザーから取れるvideo情報だけから判断すると他のvideoと同じです。YouTubeのバグの可能性が高いと思います。

YouTube管理者の方はビデオ一覧に頼らずPlaylistを積極的に使う方が良いのかも。