120 lines
13 KiB
Markdown
120 lines
13 KiB
Markdown
|
---
|
||
|
title: Twitterのfavoriteをhowmファイルにするスクリプト
|
||
|
author: kazu634
|
||
|
date: 2010-01-02
|
||
|
url: /2010/01/02/_1436/
|
||
|
wordtwit_post_info:
|
||
|
- 'O:8:"stdClass":13:{s:6:"manual";b:0;s:11:"tweet_times";i:1;s:5:"delay";i:0;s:7:"enabled";i:1;s:10:"separation";s:2:"60";s:7:"version";s:3:"3.7";s:14:"tweet_template";b:0;s:6:"status";i:2;s:6:"result";a:0:{}s:13:"tweet_counter";i:2;s:13:"tweet_log_ids";a:1:{i:0;i:5035;}s:9:"hash_tags";a:0:{}s:8:"accounts";a:1:{i:0;s:7:"kazu634";}}'
|
||
|
categories:
|
||
|
- Emacs
|
||
|
- Perl
|
||
|
|
||
|
---
|
||
|
<div class="section">
|
||
|
<p>
|
||
|
Twitter の favorite を howm ファイルにするスクリプトを作成しました。
|
||
|
</p>
|
||
|
|
||
|
<p>
|
||
|
設定を変更したい場合には、ソース中の下記を変更してください:
|
||
|
</p>
|
||
|
|
||
|
<pre class="syntax-highlight">
|
||
|
<span class="synComment"># howm のデータを格納するディレクトリ</span>
|
||
|
<span class="synStatement">my</span> <span class="synIdentifier">$howm_direcotory</span> = <span class="synConstant">"/Users/kazu634/Documents/howm"</span>;
|
||
|
<span class="synComment"># favorite を取得したいユーザー名</span>
|
||
|
<span class="synStatement">my</span> <span class="synIdentifier">$user</span> = <span class="synConstant">"kazu634"</span>;
|
||
|
</pre>
|
||
|
|
||
|
<h4>
|
||
|
ソース
|
||
|
</h4>
|
||
|
|
||
|
<pre class="syntax-highlight">
|
||
|
<span class="synComment"># === Libraries ===</span>
|
||
|
<span class="synStatement">use strict</span>;
|
||
|
<span class="synStatement">use warnings</span>;
|
||
|
<span class="synStatement">use </span>Perl6::Say;
|
||
|
<span class="synStatement">use utf8</span>;
|
||
|
<span class="synStatement">use </span>Encode;
|
||
|
<span class="synStatement">use </span>WebService::Simple;
|
||
|
<span class="synStatement">use </span>XML::Simple;
|
||
|
<span class="synStatement">use </span>YAML::Syck;
|
||
|
<span class="synStatement">use </span>Config::Auto;
|
||
|
<span class="synComment"># === Initial Setting ===</span>
|
||
|
<span class="synStatement">my</span> <span class="synIdentifier">$howm_direcotory</span> = <span class="synConstant">"/Users/kazu634/Documents/howm"</span>;
|
||
|
<span class="synStatement">my</span> <span class="synIdentifier">$user</span> = <span class="synConstant">"kazu634"</span>;
|
||
|
<span class="synStatement">my</span> <span class="synIdentifier">$page</span> = <span class="synConstant">1</span>; <span class="synComment"># page counter</span>
|
||
|
<span class="synStatement">my</span> <span class="synIdentifier">$new_id</span> = <span class="synConstant"></span>; <span class="synComment"># the newest id when obtaining the favorites.</span>
|
||
|
<span class="synStatement">my</span> <span class="synIdentifier">$howm_file</span> = get_howm_filename(); <span class="synComment"># filename for the howm file</span>
|
||
|
<span class="synStatement">my</span> <span class="synIdentifier">$howm_header</span> = get_howm_header(); <span class="synComment"># header string for the howm file</span>
|
||
|
<span class="synStatement">my</span> <span class="synIdentifier">$counter</span> = <span class="synConstant"></span>; <span class="synComment"># counter for how many times this script outputs the favorites.</span>
|
||
|
<span class="synComment"># === Until what ID number do I get from my favorites ===</span>
|
||
|
<span class="synStatement">my</span> <span class="synIdentifier">$recent_id</span> = <span class="synConstant"></span>; <span class="synComment"># variant for storing the recent-obtained ID number</span>
|
||
|
<span class="synComment"># Read the ID number from the configuration file, .get_favorite,</span>
|
||
|
<span class="synComment"># if it exists.</span>
|
||
|
<span class="synStatement">if</span> ( <span class="synStatement">-f</span> <span class="synConstant">".get_favorite"</span> ) {
|
||
|
<span class="synStatement">my</span> <span class="synIdentifier">$config</span> = Config::Auto::parse(<span class="synConstant">".get_favorite"</span>);
|
||
|
<span class="synIdentifier">$recent_id</span> = <span class="synIdentifier">$config</span>->{recent_id};
|
||
|
}
|
||
|
<span class="synComment"># === Get the favorites ===</span>
|
||
|
<span class="synStatement">my</span> <span class="synIdentifier">$twitter</span> =
|
||
|
WebService::Simple-><span class="synStatement">new</span>( <span class="synConstant">base_url </span>=> <span class="synConstant">"http://twitter.com/favorites.xml"</span>, );
|
||
|
LOOP: <span class="synStatement">while</span> (<span class="synConstant">1</span>) {
|
||
|
<span class="synStatement">my</span> <span class="synIdentifier">$response</span> = <span class="synIdentifier">$twitter</span>->get( { <span class="synConstant">id </span>=> <span class="synIdentifier">$user</span>, <span class="synConstant">page </span>=> <span class="synIdentifier">$page</span> } );
|
||
|
<span class="synComment"># If the page you request is empty, get out of the while-loop.</span>
|
||
|
<span class="synStatement">last</span> <span class="synStatement">unless</span> ( <span class="synStatement">defined</span> %{ XMLin( <span class="synIdentifier">$response</span>->content )->{status} } );
|
||
|
<span class="synStatement">my</span> <span class="synIdentifier">@ids</span> = <span class="synStatement">reverse</span> <span class="synStatement">sort</span> <span class="synStatement">keys</span> %{ XMLin( <span class="synIdentifier">$response</span>->content )->{status} };
|
||
|
<span class="synComment"># Store the newest id</span>
|
||
|
<span class="synComment"># (after obtaining the favorites,</span>
|
||
|
<span class="synComment"># this script outputs this id to the .get_favorite file).</span>
|
||
|
<span class="synIdentifier">$new_id</span> = <span class="synIdentifier">$ids</span>[<span class="synConstant"></span>] <span class="synStatement">if</span> ( <span class="synIdentifier">$page</span> == <span class="synConstant">1</span> );
|
||
|
<span class="synStatement">foreach</span> <span class="synStatement">my</span> <span class="synIdentifier">$id</span> (<span class="synIdentifier">@ids</span>) {
|
||
|
<span class="synComment"># If the favorite just getting is already obtained,</span>
|
||
|
<span class="synComment"># get out of the while-loop.</span>
|
||
|
<span class="synStatement">last</span> LOOP <span class="synStatement">if</span> ( <span class="synIdentifier">$recent_id</span> == <span class="synIdentifier">$id</span> );
|
||
|
<span class="synStatement">if</span> ( <span class="synIdentifier">$recent_id</span> < <span class="synIdentifier">$id</span> ) {
|
||
|
<span class="synStatement">my</span> <span class="synIdentifier">$text</span> =
|
||
|
encode( <span class="synConstant">"utf8"</span>,
|
||
|
XMLin( <span class="synIdentifier">$response</span>->content )->{status}->{<span class="synIdentifier">$id</span>}->{text} );
|
||
|
<span class="synStatement">open</span>( <span class="synIdentifier">HOWM</span>, <span class="synConstant">">> </span><span class="synIdentifier">$howm_file</span><span class="synConstant">"</span> ) <span class="synStatement">or</span> <span class="synStatement">die</span> <span class="synConstant">"</span><span class="synIdentifier">$!</span><span class="synConstant">"</span>;
|
||
|
say HOWM <span class="synIdentifier">$howm_header</span> <span class="synStatement">if</span> ( <span class="synIdentifier">$counter</span> == <span class="synConstant"></span> );
|
||
|
say HOWM <span class="synConstant">"[memo][twitter] </span><span class="synIdentifier">$text</span><span class="synConstant">"</span>;
|
||
|
<span class="synStatement">close</span>(<span class="synIdentifier">HOWM</span>);
|
||
|
<span class="synIdentifier">$counter</span>++;
|
||
|
}
|
||
|
}
|
||
|
<span class="synComment"># Increment the page number.</span>
|
||
|
<span class="synIdentifier">$page</span>++;
|
||
|
}
|
||
|
<span class="synComment"># === update the recent_id ===</span>
|
||
|
<span class="synStatement">open</span>( <span class="synIdentifier">FILE</span>, <span class="synConstant">'> .get_favorite'</span> ) <span class="synStatement">or</span> <span class="synStatement">die</span> <span class="synConstant">"</span><span class="synIdentifier">$!</span><span class="synConstant">"</span>;
|
||
|
say FILE <span class="synConstant">"recent_id=</span><span class="synIdentifier">$new_id</span><span class="synConstant">"</span>;
|
||
|
<span class="synStatement">close</span>(<span class="synIdentifier">FILE</span>);
|
||
|
<span class="synComment"># === Sub-routines ===</span>
|
||
|
<span class="synStatement">sub</span><span class="synIdentifier"> get_howm_filename </span>{
|
||
|
<span class="synStatement">my</span> ( <span class="synIdentifier">$sec</span>, <span class="synIdentifier">$min</span>, <span class="synIdentifier">$hour</span>, <span class="synIdentifier">$mday</span>, <span class="synIdentifier">$mon</span>, <span class="synIdentifier">$year</span> ) = <span class="synStatement">localtime</span>(<span class="synStatement">time</span>);
|
||
|
<span class="synIdentifier">$year</span> += <span class="synConstant">1900</span>;
|
||
|
<span class="synIdentifier">$mon</span> += <span class="synConstant">1</span>;
|
||
|
<span class="synIdentifier">$mon</span> = <span class="synConstant">"0</span><span class="synIdentifier">$mon</span><span class="synConstant">"</span> <span class="synStatement">if</span> ( <span class="synIdentifier">$mon</span> < <span class="synConstant">10</span> );
|
||
|
<span class="synIdentifier">$mday</span> = <span class="synConstant">"0</span><span class="synIdentifier">$mday</span><span class="synConstant">"</span> <span class="synStatement">if</span> ( <span class="synIdentifier">$mday</span> < <span class="synConstant">10</span> );
|
||
|
<span class="synIdentifier">$hour</span> = <span class="synConstant">"0</span><span class="synIdentifier">$hour</span><span class="synConstant">"</span> <span class="synStatement">if</span> ( <span class="synIdentifier">$hour</span> < <span class="synConstant">10</span> );
|
||
|
<span class="synIdentifier">$min</span> = <span class="synConstant">"0</span><span class="synIdentifier">$min</span><span class="synConstant">"</span> <span class="synStatement">if</span> ( <span class="synIdentifier">$min</span> < <span class="synConstant">10</span> );
|
||
|
<span class="synIdentifier">$sec</span> = <span class="synConstant">"0</span><span class="synIdentifier">$sec</span><span class="synConstant">"</span> <span class="synStatement">if</span> ( <span class="synIdentifier">$sec</span> < <span class="synConstant">10</span> );
|
||
|
<span class="synStatement">return</span> encode( <span class="synConstant">"utf8"</span>,
|
||
|
<span class="synConstant">"</span><span class="synIdentifier">$howm_direcotory</span><span class="synConstant">/</span><span class="synIdentifier">$year</span><span class="synConstant">/</span><span class="synIdentifier">$mon</span><span class="synConstant">/</span><span class="synIdentifier">$year</span><span class="synConstant">-</span><span class="synIdentifier">$mon</span><span class="synConstant">-</span><span class="synIdentifier">$mday</span><span class="synConstant">-</span><span class="synIdentifier">$hour$min$sec</span><span class="synConstant">.txt"</span> );
|
||
|
}
|
||
|
<span class="synStatement">sub</span><span class="synIdentifier"> get_howm_header </span>{
|
||
|
<span class="synStatement">my</span> ( <span class="synIdentifier">$sec</span>, <span class="synIdentifier">$min</span>, <span class="synIdentifier">$hour</span>, <span class="synIdentifier">$mday</span>, <span class="synIdentifier">$mon</span>, <span class="synIdentifier">$year</span> ) = <span class="synStatement">localtime</span>(<span class="synStatement">time</span>);
|
||
|
<span class="synIdentifier">$year</span> += <span class="synConstant">1900</span>;
|
||
|
<span class="synIdentifier">$mon</span> += <span class="synConstant">1</span>;
|
||
|
<span class="synIdentifier">$mon</span> = <span class="synConstant">"0</span><span class="synIdentifier">$mon</span><span class="synConstant">"</span> <span class="synStatement">if</span> ( <span class="synIdentifier">$mon</span> < <span class="synConstant">10</span> );
|
||
|
<span class="synIdentifier">$mday</span> = <span class="synConstant">"0</span><span class="synIdentifier">$mday</span><span class="synConstant">"</span> <span class="synStatement">if</span> ( <span class="synIdentifier">$mday</span> < <span class="synConstant">10</span> );
|
||
|
<span class="synIdentifier">$hour</span> = <span class="synConstant">"0</span><span class="synIdentifier">$hour</span><span class="synConstant">"</span> <span class="synStatement">if</span> ( <span class="synIdentifier">$hour</span> < <span class="synConstant">10</span> );
|
||
|
<span class="synIdentifier">$min</span> = <span class="synConstant">"0</span><span class="synIdentifier">$min</span><span class="synConstant">"</span> <span class="synStatement">if</span> ( <span class="synIdentifier">$min</span> < <span class="synConstant">10</span> );
|
||
|
<span class="synIdentifier">$sec</span> = <span class="synConstant">"0</span><span class="synIdentifier">$sec</span><span class="synConstant">"</span> <span class="synStatement">if</span> ( <span class="synIdentifier">$sec</span> < <span class="synConstant">10</span> );
|
||
|
<span class="synStatement">return</span> encode( <span class="synConstant">"utf8"</span>,
|
||
|
<span class="synConstant">"= favorites from twitter.</span><span class="synSpecial">\n\[</span><span class="synIdentifier">$year</span><span class="synConstant">-</span><span class="synIdentifier">$mon</span><span class="synConstant">-</span><span class="synIdentifier">$mday</span><span class="synConstant"> </span><span class="synIdentifier">$hour</span><span class="synConstant">:</span><span class="synIdentifier">$min</span><span class="synSpecial">\]\n</span><span class="synConstant">"</span> );
|
||
|
}
|
||
|
</pre>
|
||
|
</div>
|