Hatena::Groupnadesiko

そっとなでしこ RSSフィード


メインのブログに書くまでもない、なでしこ学習帳【記事一覧】 【このブログは何?】


特設!→【目次】なでしこ用Twitter 連携ライブラリ「なこったー」で遊ぶ


2010-06-24

twitter&はてなハイク引用HTMLを生成する、なでしこスクリプト

| twitter&はてなハイク引用HTMLを生成する、なでしこスクリプト - そっとなでしこ を含むブックマーク はてなブックマーク - twitter&はてなハイク引用HTMLを生成する、なでしこスクリプト - そっとなでしこ

 とりあえず形になりました(色々不具合が残っている悪寒がしますが…)。

【追記】一応、完成

■使い方

 スクリプトを起動すると表示されるメモ欄に、引用したいtwitterや、はてなハイクのステータスURLを改行区切りで入力して決定を押します。

 例えば、以下のURLを入力すると、

http://twitter.com/mametanuki/status/16340857818

http://h.hatena.ne.jp/Mukke/9234078269114015349

http://twitter.com/maname/status/16343275783

http://h.hatena.ne.jp/mame-tanuki/9236538674340364601

下のような表示をするHTML文が出力されます。

  


mametanuki

はてなのサービスが盛大に落ちまくってる。メンテナンスの犬画面すら出ず、「Internal Server Error」になるのは久々に見た http://i.hatena.ne.jp/idea/27496
(2010/06/17 07:41:35)

link


Mukke

はてなダイアリー
http://www.hatena.ne.jp/maintenance

>復旧いたしました。上記サービス以外にも、はてなモノリス、はてなメッセージ、はてなフォトライフにおきましても、つながりにくい状態となっておりました。原因はデータベースの過負荷によるもので、サーバの性能を強化し、復旧いたしました

嘘つき!w
(2010/06/17 07:48:08)

link


maname

はてなは私が倒した
(2010/06/17 08:19:45)

link


mame-tanuki

三文字

(2007/12/21 21:29:44)

link

■ソースコード

#-----------------------------------------------------------------------
# 出力HTMLテンプレート
#-----------------------------------------------------------------------
テンプレートヘッダーは「<table border="1" bgcolor="#FFFFFF">」。
テンプレートは「<tr>
<td width="32" height="32">
★ファビコン★<img src="★ユーザーアイコン★" width="32" height="32">
</td>
<td><a href="★サービスURL★★id★">★id★</a></td>
<td>
★コメント★
</td>
<td><a href="★つぶやきURL★">link</a></td>
</tr>」。
#-----------------------------------------------------------------------
# メイン処理
#-----------------------------------------------------------------------

「」をメモ記入して、取得URLSに代入。

もし取得URLSが「」でないならば
  出力HTMLは「」。
  取得URLSを反復
    取得URLはそれ。
    取得URLをつぶやき仕分けして、つぶやきに代入。
    もし、つぶやき→サービス名が「対象外サービス」でないならば
      #「{つぶやき→サービス名}」を言う。
      つぶやきをつぶやき整形出力。
      出力HTMLは、「{出力HTML}{それ}{改行}」。
    ここまで。
  ここまで
  出力HTMLは、「{テンプレートヘッダー}
  {出力HTML}</table>」
  出力HTMLをメモ記入。
ここまで
母艦を閉じる。

出力TXTをメモ記入。
#-----------------------------------------------------------------------
# グループ定義
#-----------------------------------------------------------------------
■対象外サービスとは
  ・サービス名
  ・URL
  ・作る~
    サービス名は「対象外サービス」
#-----------------------------------------------------------------------
■ツイッターとは
  ・{非公開}FURL
  ・サービス名
  ・サービスURL
  ・ファビコン
  ・ユーザーID
  ・ユーザーアイコン
  ・ステータスID
  ・データ文字列
  ・リプライ
  ・タグ
  ・コメント
  ・タイムスタンプ

  ・URL取得~それはFURL
  ・URL設定(V)~
    FURL=V。
    自身→初期設定。
  ・初期設定~
    自身→ステータスID設定。
    自身→データ文字列設定。
    自身→ユーザーID設定。
    自身→ユーザーアイコン設定。
    自身→コメント設定。
    自身→タイムスタンプ設定。
  ・ステータスID設定~
    自身→URLからURLファイル名抽出して、自身→ステータスIDに代入。
  ・作る~
    サービス名=「twitter」。
    ファビコン=「http://a1.twimg.com/a/1276896641/images/favicon.ico」。
    サービスURL=「http://twitter.com/」。
    APIURL=「http://twitter.com/statuses/show/」
  ・ユーザーID設定~
    自身→データ文字列から「user/screen_name」を階層タグ切り出してタグ削除。
    それを自身→ユーザーIDに代入。
  ・ユーザーアイコン設定~
    自身→データ文字列から「user/profile_image_url」を階層タグ切り出してタグ削除。
    それ[0]を自身→ユーザーアイコンに代入。
  ・復号処理~システム:HTMLエンティティ復号
  ・リプライ抽出(抽出対象)~
    自身→リプライは、抽出対象から「replies」をタグ切り出し。
    抽出対象の「{自身→リプライ}」を「」に置換。
    それで戻る。
  ・データ文字列設定~
    問合せURL=「{APIURL}{ステータスID}.xml」
    問合せURLからHTTPデータ取得して自身→復号処理。
    リプライ抽出(それ)。
    それを自身→データ文字列に代入。
    #「{自身→データ文字列}」を言う。
  ・タグ抽出処理(抽出対象)~
    #ハッシュタグ抽出機能を実装予定
    抽出対象で戻る。
  ・特殊記法置換(置換対象)~
    置換対象の「@([a-zA-Z0-9_-]+)」を「<a href="{サービスURL}$1">@$1</a>」へ正規表現置換。
    それで戻る。
  ・コメント設定~
    自身→データ文字列から「status/text」を階層タグ切り出してタグ削除。
    自身→タグ抽出処理(それ)。
    自身→特殊記法置換(それ)。
    #IDコール抑止
    それの「id:([a-zA-Z][a-zA-Z0-9_-]{波カッコ}1,30{波カッコ閉じ}[a-zA-Z0-9])」を「<a href="http://b.hatena.ne.jp/$1">id:$1</a>」へ正規表現置換。
    それを自身→コメントに代入。
  ・地域標準時変換(UTC日付、UTC時刻、加減算演算子、加減算時間)~
    加減算日数は0。
    地域標準時刻は、UTC時刻に「{加減算演算子}{加減算時間}」を時間加算。
    UTC時刻を「:」で区切り、UTC時刻配列に代入。
    加減算時間を「:」で区切り、加減算時間配列に代入。
    もし、加減算演算子が「+」ならば
      秒換算は((UTC時刻配列[0]×60×60)+(UTC時刻配列[1]×60)+(UTC時刻配列[2]))+
      ((加減算時間配列[0]×60×60)+(加減算時間配列[1]×60)+(加減算時間配列[2]))
      もし、秒換算が(24×60×60)以上ならば
        加減算日数は1。
    違えば
      秒換算は((UTC時刻配列[0]×60×60)+(UTC時刻配列[1]×60)+(UTC時刻配列[2]))-
      ((加減算時間配列[0]×60×60)+(加減算時間配列[1]×60)+(加減算時間配列[2]))
      もし、秒換算が0未満ならば
        加減算日数は1。
    地域標準日時は、UTC日付に「{加減算演算子}0/0/{加減算日数}」を日付加算。
    「{地域標準日時} {地域標準時刻}」で戻る。
  ・タイムスタンプ設定~
    英語月@「Jan」=「01」
    英語月@「Feb」=「02」
    英語月@「Mar」=「03」
    英語月@「Apr」=「04」
    英語月@「May」=「05」
    英語月@「Jun」=「06」
    英語月@「Jul」=「07」
    英語月@「Aug」=「08」
    英語月@「Sep」=「09」
    英語月@「Oct」=「10」
    英語月@「Nov」=「11」
    英語月@「Dec」=「12」
    自身→データ文字列から「status/created_at」を階層タグ切り出してタグ削除。
    取得日時はそれ[0]を「 」で区切る。
    英語月@「{取得日時[1]}」を取得月に代入する。
    取得JST日付は「{取得日時[5]}/{取得月}/{取得日時[2]}」。
    自身→地域標準時変換(取得JST日付、取得日時[3]、「+」、「09:00:00」)。
    それをタイムスタンプに代入。

  ・URL  ←URL設定  →URL取得

#-----------------------------------------------------------------------
■Hatenaハイクとは +ツイッター
  ・作る~
    サービス名は「はてなハイク」
    ファビコン=「http://favicon.hatena.ne.jp/?url=http://h.hatena.ne.jp/」。
    サービスURL=「http://h.hatena.ne.jp/」。
    APIURL=「http://h.hatena.ne.jp/api/statuses/show/」
  ・復号処理~システム:SJIS変換
  ・タグ抽出処理(抽出対象)~
    抽出対象を「^.*=」で正規表現マッチ。
    それの「=」を「」に置換してタグTXTに代入。
    「<a href="http://h.hatena.ne.jp/{タグTXTをURLエンコード}">{タグTXT}</a>」を自身→タグに代入。
    抽出対象の「^.*=」を「」へ正規表現置換。
    それで戻る。
  ・特殊記法置換(置換対象)~ 
    正規表現修飾子バックアップは正規表現修飾子。
    正規表現修飾子は正規表現修飾子&「i」。
    置換対象の「(https?://[-_.!~*'()a-z0-9;/?:@&=+$,%#]+\.(jpg|jpeg|png|gif|bmp))」を「<img src="$1">」へ正規表現置換。
    正規表現修飾子は正規表現修飾子バックアップ。
    それで戻る。
  ・タイムスタンプ設定~
    自身→データ文字列から「status/created_at」を階層タグ切り出してタグ削除。
    タイムスタンプ配列は、それ[0]を「T」で区切る。
    取得JST日付は、タイムスタンプ配列[0]の「-」を「/」に置換。
    取得JST時刻は、タイムスタンプ配列[1]の「Z」を「」に置換。
    「取得JST日付{取得JST日付}取得JST時刻{取得JST時刻}」を表示。
    自身→地域標準時変換(取得JST日付、取得JST時刻、「+」、「09:00:00」)。
    それをタイムスタンプに代入。

#-----------------------------------------------------------------------
# 関数定義
#-----------------------------------------------------------------------
●つぶやき仕分け(URLを)
  URLからURLドメイン名抽出して、取得ドメインに代入。
  取得ドメインで条件分岐
    「twitter.com」ならば
      生成グループをツイッターとして作成。
    「h.hatena.ne.jp」ならば
      生成グループをHatenaハイクとして作成。
    違えば
      生成グループを対象外サービスとして作成。
  ここまで
  生成グループ→URLはURL。
  生成グループで戻る。

●つぶやき整形出力({グループ}対象グループを)
  ファビコンリンク=「<a href="{対象グループ→サービスURL}">
<img src="{対象グループ→ファビコン}">
</a><br>」。
  ファビコンリンクは、ファビコンリンクの「{改行}」を「」に置換。
  
  タグリンク=「」。
  もし対象グループ→タグが「」でないならば
    タグリンク=「<span style="font-style:italic;">{対象グループ→タグ}</span><br>」。
  出力TXTは、テンプレートの「★id★」を「{対象グループ→ユーザーID}」に置換。
  出力TXTは、出力TXTの「★ファビコン★」をファビコンリンクに置換。

  出力TXTは、出力TXTの「★ユーザーアイコン★」を「{対象グループ→ユーザーアイコン}」に置換。
  コメント=「{タグリンク}{対象グループ→コメント}<br>({対象グループ→タイムスタンプ})」。
  出力TXTは、出力TXTの「★コメント★」をコメントに置換。
  出力TXTは、出力TXTの「★つぶやきURL★」を「{対象グループ→URL}」に置換。
  出力TXTは、出力TXTの「★サービスURL★」を「{対象グループ→サービスURL}」に置換。
  出力TXTで戻る。

 今のところ分かっている不具合は、twitterのサービスが過負荷で、クジラの絵の「Over capacity」画面が表示された場合に、なでしこの実行エラーになってしまうこと。そういう例外処理が実装できていません。

 とりあえず次は、下記のスクリプトを統合し、twitter&はてなハイク&はてなブックマークが引用できるスクリプトに拡張しようかと思います。