twitterのRSSを取得する方法が段々使えなくなってるみたいで、たとけば http://twitter.com/statuses/user_timeline/95405735.rss のような形式では取得できなくなった。
幸いなことに、http://api.twitter.com/1/statuses/user_timeline.rss?user_id=95405735 の形式だとまだ取得できる。
MySQLのデータベースに前者の形式のURLがたくさんあって、これを後者の形式に置き換えたい。しかしMySQLには正規表現での置換ができないみたいで、だからといっていちいちスクリプトを書くのは面倒くさいのでなんとかできないか。
注:テーブルの変換は間違ったとき戻せなくなる場合があるのでコピーをとっておいたほうが良い
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
mysql> select * from url limit 3; +----+--------+--------------------------------------------------------+--------+--------+ | id | giinid | url | ismain | isfeed | +----+--------+--------------------------------------------------------+--------+--------+ | 1 | 287 | http://www.aisawa.net/ | 1 | 0 | | 2 | 287 | http://twitter.com/statuses/user_timeline/95405735.rss | 0 | 1 | | 3 | 244 | http://www.a-jiro.jp/ | 1 | 0 | +----+--------+--------------------------------------------------------+--------+--------+ mysql> select * from url where `url` like 'http://twitter.com/statuses/user_timeline/%' limit 3; +----+--------+---------------------------------------------------------+--------+--------+ | id | giinid | url | ismain | isfeed | +----+--------+---------------------------------------------------------+--------+--------+ | 2 | 287 | http://twitter.com/statuses/user_timeline/95405735.rss | 0 | 1 | | 16 | 618 | http://twitter.com/statuses/user_timeline/123482369.rss | 0 | 1 | | 23 | 634 | http://twitter.com/statuses/user_timeline/112283606.rss | 0 | 1 | +----+--------+---------------------------------------------------------+--------+--------+ 3 rows in set (0.00 sec) mysql> UPDATE url SET url = REPLACE(url, '.rss', ''); Query OK, 141 rows affected (0.16 sec) Rows matched: 1458 Changed: 141 Warnings: 0 mysql> select * from url where `url` like 'http://twitter.com/statuses/user_timeline/%' limit 3; +----+--------+-----------------------------------------------------+--------+--------+ | id | giinid | url | ismain | isfeed | +----+--------+-----------------------------------------------------+--------+--------+ | 2 | 287 | http://twitter.com/statuses/user_timeline/95405735 | 0 | 1 | | 16 | 618 | http://twitter.com/statuses/user_timeline/123482369 | 0 | 1 | | 23 | 634 | http://twitter.com/statuses/user_timeline/112283606 | 0 | 1 | +----+--------+-----------------------------------------------------+--------+--------+ 3 rows in set (0.00 sec) mysql> UPDATE url SET url = REPLACE(url, 'http://twitter.com/statuses/user_timeline/', 'http://api.twitter.com/1/statuses/user_timeline.rss?user_id='); Query OK, 139 rows affected (0.02 sec) Rows matched: 1458 Changed: 139 Warnings: 0 mysql> select * from url where `url` like 'http://twitter.com/statuses/user_timeline/%' limit 3; Empty set (0.00 sec) mysql> select * from url where `url` like 'http://api.twitter.com/1/statuses/user_timeline.rss?user_id=%' limit 3; +----+--------+-----------------------------------------------------------------------+--------+--------+ | id | giinid | url | ismain | isfeed | +----+--------+-----------------------------------------------------------------------+--------+--------+ | 2 | 287 | http://api.twitter.com/1/statuses/user_timeline.rss?user_id=95405735 | 0 | 1 | | 16 | 618 | http://api.twitter.com/1/statuses/user_timeline.rss?user_id=123482369 | 0 | 1 | | 23 | 634 | http://api.twitter.com/1/statuses/user_timeline.rss?user_id=112283606 | 0 | 1 | +----+--------+-----------------------------------------------------------------------+--------+--------+ 3 rows in set (0.00 sec) mysql> |
このやり方だと’.rss’を削除したときに2つ(141-139)違うものを変換してしまった。
ちゃんとやるならwhereで条件を絞ればいいんだろうがここではスルー