Timelogのページでは「投稿:4033メモ」で、Timelog APIで手元にもってきたメモが4033個。わーい、全部取得できたー。
Timelogのページでは「投稿:4033メモ」で、Timelog APIで手元...,Timelo - 今をメモする「Timelog」

TimelogのAPIは指定した日付のメモを取得できるのがありがたい (Twitterだと日時指定できないから)。でも50件までしか取得できないから、50件以上あったらどうするんだろう。。。

以下、Timelog APIと格闘した際のメモ。 (NI-Lab.の今日のメモ - 今をメモする「Timelog」 の印刷用ページのHTMLをそのまま貼り付けただけ)

2011年03月18日(金)

06:13あれ? もしかして TimelogAPI の ttp://api.timelog.jp/my_msg.asp では2010年1月1日からしかデータが取得できない?ちなみに投稿した全4016メモ中、2414件が取得できてる。 [TimelogAPI]
06:23ホームのメモ表示最大件数がプレミアム会員 ttp://timelog.jp/premium/ だと5000件表示で、無料会員だと1000件表示。APIでは2414件とってこれてるからプレミアム会員かどうかは関係ないぽいね。 [TimelogAPI]
06:32TimelogAPI の ttp://api.timelog.jp/my_msg.asp で2010年1月1日より前のデータを取得できないんでしょうか?できるようにしてもらえるとうれしいです。 [要望] [TimelogAPI]

20:47うーん、やっぱり昔のメモをTimelog APIでもってくることができないみたい。。。 [TimelogAPI] [Timelog]

21:402010年1月1日からのメモはTimelog APIで取得可能。それより前のメモがAPIで取得できない。 はOKだけど はNG.http://api.timelog.jp/my_msg.asp?since=20100101 http://api.timelog.jp/my_msg.asp?since=20091231 [Timelog] [TimelogAPI]

2011年03月19日(土)

08:55Timelog API で 2010年1月1日より前のメモが取得できないので ttp://timelog.jp/life/?ac=nilab&dt=20101231 とかを直接取得するしかないかなぁ。。。 [TimelogAPI] [Timelog]
08:56こっちのほうがいいかな。 ttp://api.timelog.jp/blife.asp?mi=94b90f6816fe3f2&dt=20101231 [TimelogAPI] [Timelog]

09:42TimelogAPI は5秒に1回までしかアクセスしてはいけないらしいので、ちょっと多めにみて7秒間隔で取得してみる。ただ、取得先のURLは正規のAPIではなくて ttp://api.timelog.jp/blife.asp?mi=94b90f6816fe3f2&dt=20101231 を使ってみる。登録した日から今日まで。3年分ぐらいなので、だいたい2時間ぐらいかかるかな。 [TimelogAPI] [Timelog]

10:04Timelog API でダウンロードしてるファイルのサイズが小さいと何かアクセス制限受けてるんじゃないかと心配になる ((((;゜Д゜))))ガクガクブルブル でももともと投稿してない日だったりしてちょっと安心。止めないでね、止めないでね。。。 [TimelogAPI] [Timelog]
10:06あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもやゆよらりるれろわゐゑをんアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヰヱヲンあいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもやゆよらりるれろわゐゑをんアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヰヱヲンあいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもやゆよらりるれろわゐゑをんアイウエオカキクケコサシスセソタ
10:06Timelogはすごく長いテキストも入るのがすごい。

13:14Timelog APIでは1日のメモが50件までしか取得できなくて、51件目からはどうやって取得すればいいんだろう?自分のメモは1日に50件を超えるのはなさそうだからまぁいいけど。。。 [TimelogAPI]
13:54ttp://api.timelog.jp/blife.asp?mi=94b90f6816fe3f2&dt=20101231 で取得したメモは年月日時分まではあるけど秒がないのか。。。もし同じ秒のメモがあったらちゃんと順番を別データにもたせて管理するか、クイックなやりかたなら00秒とか01秒とかつけてごまかすかなぁ。 [TimelogAPI]

14:18そっか ttp://api.timelog.jp/blife.asp?mi=94b90f6816fe3f2&dt=20101231 で取得したデータにはタグが無いのね。ということは個別のメモページをwgetなりで取得してやりやりくりくりするぐらいしか。念のためゆっくりスリープかけてwgetしよう、うん。いつか過去のメモもAPIで取得できると信じてるけど、いちおう。。。 [TimelogAPI]
14:21謝謝!ありがとうございます! m(_ _)m Timelog API で昔のメモが取れました! > KSMT [謝謝] [TimelogAPI]

16:57Timelogのページでは「投稿:4033メモ」で、Timelog APIで手元にもってきたメモが4033個。わーい、全部取得できたー。 [TimelogAPI]

ちなみに以下は自作ライブラリを使ってメモを取得するJavaのコード。こんな感じでTimelog APIからXMLデータを取得してる。


private static TimelogEntry[] getEntries(String yyyymmdd) throws Exception {
  GetRequest req = new GetRequest("http://api.timelog.jp/my_msg.asp");
  req.set("cnt", "50");
  req.set("hc", "1");
  req.set("since", yyyymmdd);
  Rest rest = new Rest();
  XmlResponse res = rest.get(req);
  int length = res.getLength("memos/entry");
  TimelogEntry[] t = new TimelogEntry[length];
  for(int i=0; i<length; i++){
    t[i] = new TimelogEntry();
    t[i].id = res.getString("memos/entry[" + (i+1) + "]/id");
    t[i].modified = parseDate(res.getString("memos/entry[" + (i+1) + "]/modified"));
    t[i].memo = res.getString("memos/entry[" + (i+1) + "]/memo");
    t[i].toid = res.getString("memos/entry[" + (i+1) + "]/toid");
    t[i].toname = res.getString("memos/entry[" + (i+1) + "]/toname");
    t[i].replyid = res.getString("memos/entry[" + (i+1) + "]/replyid");
    t[i].tag = res.getString("memos/entry[" + (i+1) + "]/tag");
    t[i].star = Integer.parseInt(res.getString("memos/entry[" + (i+1) + "]/star"));
  }
  return t;
}
 
private static Date parseDate(String s) throws ParseException{
  DateFormat format = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
  Date d = format.parse(s);
  return d;
}

Timelog APIで自分のメモを取得するには、BASIC認証が必要。JavaってBASIC認証つかうのたいへんなのね。。。

データはこんな感じでMySQLに入れてある。検索とかまったく考慮しない。
それぞれのデータのサイズがどうなるかわからなかったので、ほぼTEXTデータ型でごまかしてる。
また、同じ年月日時分秒のデータあったら順序が正確になることは保証できない。ちゃんと時系列に連番を振るべき。Timelog APIはちゃんと時系列で返してくれるので、ちゃんとやろうと思えばちゃんとできるはず。


id: メモの固有ID
modified: メモ投稿日 YYYY-MM-DD HH:MM:SS
memo: メモの内容
toid: メモの宛先ID
toname: 宛先ニックネーム
replyid: 元メモID
tag: タグ
star: 評価数(☆)
 
create table timelog (
id        varchar(255)  not null default '',
modified  datetime,
memo      text          not null default '',
toid      varchar(255)  not null default '',
toname    text          not null default '',
replyid   varchar(255)  not null default '',
tag       text          not null default '',
star      int           not null default 0,
primary key (id),
index i_timelog_modified (modified)
) ENGINE=MyISAM;
 
mysql> show columns from timelog;
+----------+--------------+------+-----+---------+-------+
| Field    | Type         | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------+-------+
| id       | varchar(255) | NO   | PRI |         |       |
| modified | datetime     | YES  | MUL | NULL    |       |
| memo     | text         | NO   |     | NULL    |       |
| toid     | varchar(255) | NO   |     |         |       |
| toname   | text         | NO   |     | NULL    |       |
| replyid  | varchar(255) | NO   |     |         |       |
| tag      | text         | NO   |     | NULL    |       |
| star     | int(11)      | NO   |     | 0       |       |
+----------+--------------+------+-----+---------+-------+
 
mysql> show indexes from timelog;
+---------+------------+--------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| Table   | Non_unique | Key_name           | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment |
+---------+------------+--------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| timelog |          0 | PRIMARY            |            1 | id          | A         |           0 |     NULL | NULL   |      | BTREE      |         |
| timelog |          1 | i_timelog_modified |            1 | modified    | A         |        NULL |     NULL | NULL   | YES  | BTREE      |         |
+---------+------------+--------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+

こうやって取得したTimelogのメモはTwitterやはてなブックマークのデータとともに nilog に表示している。レイアウトとかぐちゃぐちゃだけどまぁとりあえずこれでよし。

あと、画像ファイルやいろいろなもののバックアップを NI-Lab. - 今をメモする「Timelog」 (backup) に置くことにした。いまはざっくりだけど。。。

Ref.
-今をメモするミニブログサービス「Timelog(タイムログ)」
-今をメモする「Timelog」 - 「Timelog」APIについて

iPhoneを持つまではTimelogのほうがケータイから使いやすかったからよく使ってたんだけど、ユーザー数やら他サービスとの連携もあって、さいきんTwitterばっかり使ってる。Timelogあまり使わなくなってきてるなぁ、タグの仕組みとかサイトのデザインとかいい感じだから好きなんだけどね。。。

tags: Timelog nilog WebAPI MySQL zurazure

Posted by NI-Lab. (@nilab)