Lesson7.MXLをパースする
ワークフロー
このワークフローには7つのScriptFilterがありますが作りは全て同じ
まずは『(ヤフー ゆるネタ)』のコードを見てください
変数queryにアクセスするURLを格納しています
後で、この部分変えれば他にも使い回しができるかなという魂胆です
続いて配列変数title,desc,linkを作ります
cURLでソースを取得して、grepとsedで抽出・整形しています
初めはxmllintで解析する方法を試したのですが、うまく行きませんでした
空白があってパースが途切れる感じです
どうせ空白を取る必要があるのであればと思い、sedとgrepを選択しました
インターネットからのコピペなのでオプションやパラメータは吟味していません
そう、動いたからいいやのノリです
URLからRSS取得、空白削除、タグ抽出、タグの中身の取り出しという4段階を
パイプで繋いでいます
テスト中に気が付いたのですが、descriptionタグには<や>でaタグが
埋め込まれていたので、空白削除の後に<から>に囲まれた部分も削除しています
ちょっと気になるのが、それぞれのタグごとにcURLを利用しているので、無駄なコードに
なっている点。色々と試してみたのですが、うまくいきませんでした(力量不足です)
最後はJSONフォーマットの記述
はじめはサンプル通りEOBで書いてみました
ただ、せっかく配列を利用したので、ループ処理で文字列をつなげてみました
(線が繋がっているScriptFilterを見てくださいな)
こちらはEOBではないのですが、最後にechoをしてみたらうまくAlfredに表示させる
ことができました
兎にも角にも、これでコア部分の完成です
RunScript
ヤフーニュース『みんなの意見』にはカテゴリがあるので、
はじめにカテゴリーを選択させて、次に詳細のタイトルを選ばせたいと思い
試行錯誤した結果、複数のScriptFilterを並列するという方法をとりました
具体的にはScriptFilterのキーワードを『ヤフー 〇〇〇〇』とするだけ
こうすることで、『ヤフー』と入力すると、全てのカテゴリーが表示できます
実際に動かしてみてください。サンプル動画もどうぞ
AlfredのJSONフォーマットのサンプルとしてScriptFilterが準備されていたので、
何かに利用できないかと考えたらすぐにRSSフィードが思い浮かびました
よくあるニュースサイトのRSSなどをみていたら、ヤフーのRSS一覧を発見
https://news.yahoo.co.jp/rss
下の方にあったみんなの意見という一連のRSSをインタラクティブにAlfredで表現してみました
もし皆さんがRSSをよく利用するのであれば、RSS xxxをキーワードとしてAlfredで
まとめてみてはいかかでしょう
ヤフーニュースの『みんなの意見』を表示させる
1.alfredworkflowをダウンロード
2.ファイルをダブルクリックしてワークフローに登録
Alfredからキーワード起動『ヤフー』
・ScriptFilterのJSONフォーマットの編集をワンライナーから1行1プロパティーに変更
修正前
json=$json'{"title":"'${title[i]}'","subtitle":"'${desc[i]}'","arg":"'${link[i]}'"}'
修正後
json=$json'{"title":"'${title[i]}'",'
json=$json'"subtitle":"'${desc[i]}'",'
json=$json'"arg":"'${link[i]}'"}'
・シェルスクリプトをbashからzshに変更