読者です 読者をやめる 読者になる 読者になる

h.hatena.com は生きていた

とっくに引導を渡されたと思っていた h.hatena.com 。実は、まだ生きていた。

http://h.hatena.com/api/statuses/public_timeline.json?count=30
投稿などの URL だと 301 でトップの「終了しました」に飛ばされちゃうけど、
はてなハイクタイムラインAPIドメインを .hatena.com で使うと、サーバが生きてるだけじゃなくて、投稿もされていることが分かる。
iPhone の非公式アプリ HaikuNeko や、Google Chrome の「どこでもはてなスター」拡張から投稿できているみたい。

☆だけではなく、メモを書き残すこともできる (メモははてなハイクに投稿される)。

どこでもはてなスター (Chrome)とは - はてなキーワード


GitHub にある、「どこでもはてなスター」拡張のソース。

https://github.com/wakaba/chrome-hatena-star-everywhere/blob/master/entry-script.js#L446

function postHaikuEntry (args, nextCode) {
  var self = this;
  bg.getRKM (function (rkm) {
    var xhr = new XMLHttpRequest ();
    var postURL = 'http://' + bg.config.getDomain ('h') + '/api/statuses/update.json';
    xhr.open ('POST', postURL, true);

記事を POST する URL は、bg.config.getDomain() を介して決められている。
getDomain メソッドは、Google Chromeロケールを見て、h.hatena.ne.jp か h.hatena.com を切り替えている。

https://github.com/wakaba/chrome-hatena-star-everywhere/blob/master/user-config.js#L25

  getDomain: function (subdomain) {
    if (this.get ('tld') == 'jp') {
      return subdomain + '.hatena.ne.jp';
    } else {
      return subdomain + '.hatena.com';
    }
}, // getDomain


https://github.com/wakaba/chrome-hatena-star-everywhere/blob/master/user-config.js#L5

UserConfig.prototype = {
  defaultValues: {
    allowedURLs: '^https://[^/]+\\.hatena\\.(?:ne\\.jp|com)/',
    disallowedURLs: '^https://\n^http://[^/.]+/',
    tld: /^ja(?:_|$)/.test (chrome.i18n.getMessage ('@@ui_locale')) ? 'jp' : 'com',
    iconType: 'default',
    nameType: 'nickname',
    useIconStar: false,
}, // defaultValues


投稿してみるべ。

(function() {
    var xhr = new XMLHttpRequest();
    var postURL = 'http://h.hatena.com/api/statuses/update.json';
    xhr.open ('POST', postURL, true);
    xhr.onreadystatechange = function() {
        if (xhr.readyState == 4) {
            if (xhr.status < 400) {
                alert('OK');
                console.log(JSON.parse(xhr.responseText));
            }
        }
    };
    xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    var data =
        'keyword=' + encodeURIComponent('はてなハイク') +
        '&status=' + encodeURIComponent('h.hatena.com は、まだ生きている!?') +
        '&source=' + encodeURIComponent('a-kuma3 test') +
        '&rkm=' + encodeURIComponent(...);      // rkm は、h.hatena.ne.jp のページから引っこ抜く
    xhr.send(data);
})();

クロスオリジンの制約があるので、h.hatena.com のページで Bookmarklet として実行。
ログイン状態を表している rkm は、h.hatena.ne.jp のページから引っこ抜いて書いておく。

BASIC 認証があるので、ユーザID と API キーをパスワードとして入力。


はてなハイクAPI で確認。
http://h.hatena.com/api/statuses/public_timeline.json?count=30

h.hatena.ne.jp で投稿を確認。
http://h.hatena.ne.jp/a-kuma3/81808088407040107

でも、h.hatena.com への投稿だから、h.hatena.ne.jp のキーワードページには表示されないの。
http://h.hatena.ne.jp/target?word=%E3%81%AF%E3%81%A6%E3%81%AA%E3%83%8F%E3%82%A4%E3%82%AF