不撓不屈

戦国史同盟管理人・蛛賢(Shuken)のブログです。 サイト運営情報、技術情報、備忘録、作品公開等について投稿しています。

twitter

 本日から関連Tweetを収集・自動RTするサービス「戦国史レーダー」 の試験運用を開始します。



 近年、インターネット上で活動するクリエーターにおいて、Twitterと個人のレンタルアップローダによって作品を公開している方は少なくありません。

 そこで、従来の掲示板やアップローダに代わる新たな支援の形として、Twitterに投稿された戦国史シナリオ等の情報をまとめる「戦国史レーダー」の提供を開始しました。

 本サービスは、書籍やネットの情報を参考に、管理人が手作業で作成しています。ご意見、ご要望等ありましたら、お気兼ねなくお寄せください。

 個人運営であるため、対応が遅くなることがあるかもしれませんが、併せてよろしくお願いします。

 戦国史界隈の活性化、ファンの輪が広がるお手伝いができれば幸いです。

 ぜひご利用いただければ幸いです。


概要

 以下の戦国史関連ハッシュタグを含むTweetを収集し、自動RTします。

  • #戦国史up ... 戦国史シナリオの新作、更新情報
  • #戦国史素材 ... 戦国史シナリオ用のマップ、画像、BGM等の新作、更新情報
  • #戦国史tool ... 戦国史用ツールの新作、更新情報
  • #戦国史cm ... 上記に該当しない戦国史に関する情報、イベント、プロジェクト、サイト更新、動画配信等

 専用アカウントのフォロワーに戦国史情報を発信し、クリエーターとプレーヤー両方がWin-Winを実現するサービスをめざしています。


自動RT

 特定のハッシュタグ(#戦国史up#戦国史素材#戦国史tool#戦国史cm)を含むTweetをRTします。

 なお、Twitter Developer APIの利用規約上、無関係(FF外)のユーザに対する自動RTは認められていないため、専用アカウントをフォローしているユーザのTweetのみRTする仕組みとしています。

 RTによりフォロワーのタイムラインに表示されるため、FF外ユーザに対しても間接的に情報を発信できます。

※Twitter Developer APIからの応答が何らかのタイミングで空になる場合があり、その際、RTに失敗するケースがあるようです。その場合は、再度投稿してもらうか、私の方で手動RTを行いたいと思います。
なお、頻度によっては設計を見直し、RTだけ分離させ、別のプログラムとして走らせるかもしれません。


Tweet DB

 サブ機能として、収集したTweetを検索できるサービスを提供しています。

 なお、特定ハッシュタグを含むがRTはしていないTweet(専用アカウントをフォローしていないユーザのTweet)についても収集していますが、今後「非表示化」「一定期間後に削除する」といった仕様に変更するかもしれません。

 また、現行、一度収集したTweet情報を再巡回(更新)する仕組みにはなっていません。


使い方

  1. 専用アカウントをフォローします。(重要)
  2. 以下発信したい情報に合致する特定のハッシュタグを含んでTweetします。
    • #戦国史up ... 戦国史シナリオの新作、更新情報
    • #戦国史素材 ... 戦国史シナリオ用のマップ、画像、BGM等の新作、更新情報
    • #戦国史tool ... 戦国史用ツールの新作、更新情報
    • #戦国史cm ... 上記に該当しない戦国史関連情報、イベント、プロジェクト、サイト更新、動画配信等
  3. その後、投稿から30分経ったTweetを対象にレーダーが収集します。(投稿直後は修正等が入ることもあるため)

今後の予定

 予定は未定ですが、以下の機能追加により充実させたいと考えています。

  • ジャンル別ユーザ投稿数ランキング
  • 人気ワード抽出(形態素解析等による)
 詳しい仕様等は…

このエントリーをはてなブックマークに追加 mixiチェック

備忘のため投稿します。

使える文字、使えない文字色々あるようですが、PHPでは次の正規表現で抽出できると思います。
(2020年6月6日現在の内容です。ちょいちょい変わるようです。)

この例ではハッシュタグを抽出したら、その文字列をaリンクタグで囲むように置換しています。
オプションのUnicode「/u」は必須です。例の「rel = "noopener"」も追加しています。
$full_text = preg_replace('/(?:^|[^\w\x{05be}\x{05f3}\x{05f4}&_\/]+)
[##]([\w\x{05be}\x{05f3}\x{05f4}]*[\p{L}_\x{30FB}]+[\w\x{05be}\x{05f3}\x{05f4}]*)/u', '<a href="https://twitter.com/hashtag/$1" target="_blank" rel="noopener">#$1</a>', $full_text);
ただし、これの場合、直前の改行も置換する場合があるので、
文中のハッシュタグでない「#」の可能性を考慮せず、割り切ってしまえば、
$full_text = preg_replace('/[##]([\w\x{05be}\x{05f3}\x{05f4}]*[\p{L}_\x{30FB}]+[\w\x{05be}\x{05f3}\x{05f4}]*)/u', '<a href="https://twitter.com/hashtag/$1" target="_blank" rel="noopener">#$1</a>', $full_text);
でも良いかと思います。(良い方法あればご教示ください……)

なお、Twitter APIで本文を取得する際には、デフォルトだと115文字程度で省略されますので、
クエリオプションに「"tweet_mode" => "extended"」を追加するようにしましょう。
その際、本文の格納先が「text」から「full_text」になるので留意ください。

また、クエリ結果をデータベースに格納する場合は、
本文中の特殊絵文字が扱えるようにテーブルの文字コードを「UTF8MB4」にしてください。

いろいろ独特なAPIと感じています。
日々勉強していますが、ある程度の妥協も必要かと思いました。

【参考】
参考URLには中黒「・」対応(おそらく途中から使えるようになった?)と、
文中に出現した場合のハッシュ直前の抽出について追加しています。


追加したバージョンのテスト結果。
(.NET用なのでUnicodeが/u~となっています。PHPでは/x{~}となります。)
.NET Regex Tester - Regex Storm

このエントリーをはてなブックマークに追加 mixiチェック

↑このページのトップヘ