Yahoo! Pipesは覚えているでしょうか。ビジュアルプログラミング環境のような使い勝手で、テキストやフィードのデータを加工できる面白いサービスでした。すでに同サービスはなくなってしまいましたが、便利に使っている人はたくさんいました。 今回紹介するRikoはそんなYahoo! Pipesライクなデータの取得や加工が手軽にできるソフトウェアです。

Rikoの使い方

Rikoは画面はなく、スクリプトで作っていく必要があります。例えば以下のコードはHacker Newsのデータをとってきて、カウントを取るというものです。

>>> from riko.collections.sync import SyncPipe
>>> url = 'https://news.ycombinator.com/'
>>> fetch_conf = {
    'url': url, 'start': '<body>', 'end': '</body>', 'detag': True}  # 1
>>>
>>> replace_conf = {
    'rule': [
        {'find': '\r\n', 'replace': ' '},
        {'find': '\n', 'replace': ' '}]}
>>>
>>> flow = (
    SyncPipe('fetchpage', conf=fetch_conf)                           # 2
        .strreplace(conf=replace_conf, assign='content')             # 3
        .stringtokenizer(conf={'delimiter': ' '}, emit=True)         # 4
        .count(conf={'count_key': 'content'}))                       # 5
>>>
>>> stream = flow.output                                                 # 6
>>> next(stream)                                                         # 7
{"'sad": 1}
>>> next(stream)                                                         # 8
{'(': 28}
>>> next(stream)                                                         # 9
{'(1999)': 1}

設定を作ってパイプでつなぎつつ、連続的に適用します。最終的に output メソッドによってイテレーションが返ってきます。ビジュアルプログラミング環境は別途用意する必要がありますが、それさえできればとても面白いツールになりそうです。

RikoはPython製のオープンソース・ソフトウェア(MIT License)です。

nerevu/riko: A python stream processing engine modeled after Yahoo! Pipes