不撓不屈

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

 本日から関連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チェック

Coreserverにおける「CRONによるphpの動かし方」を備忘のため投稿します。

1.まずはshファイルやphpファイルの置き場所を考えます。

Coreserverでは、外部公開用の「public_html」フォルダよりも上の階層にshファイルやphpファイルを設置でき、動かすことができます。
CRONで動かすphpファイルは、基本的に外部から触られたくないので嬉しいですね。

今回は「public_html」と同じ並びにフォルダを作成して、実行するphpファイルを格納しました。


2.Tera termのSSH接続によりphpファイルを動かしてみます。

ブラウザでアクセスする場合と、CRONによりphpファイルを実行する場合とでは挙動が異なる場合があります。
そのため、設置予定のphpファイルがブラウザで正常に動いていたとしても、Tera termで直接確認することをお勧めします。
(結局手っ取り早いです。)


cd /virtual/(ユーザ名)/(phpフォルダ格納先)
/usr/local/bin/php run.php

(補記)require先のパス指定のコツ
require_once("./init.php");
より
require_once( dirname(__FILE__) . '/init.php");

と設定した方が良さそうです。
(カレントディレクトリの認識が上手くいかない場合があるとのこと。)

また、上手く動かない命令があるときは、動作させるphpのバージョンを確認してください。




3.shファイルを作成します。

CRONで実行するshファイルを作成し、「public_html」と同階層の任意の場所に設置します。


#!/bin/sh

# cron shell for coreserver
cd /virtual/(ユーザ名)/(phpフォルダ格納先)

/usr/local/bin/php run.php

exit
ここでphpを実行する命令行は、実際にTera termで動作確認したものを記載します。

なお、改行コードはLF(Unix系)、文字コードはUTF-8としましょう。(重要)

4.Tera termのSSH接続によりshファイルを動かしてみます。

phpファイルと同様に直接shファイルを実行してみてください。

$ sh /virtual/(ユーザ名)/cron.sh


5.coreserverのコントロールパネルからcronの設定を行います。

サイト設定→CRONジョブから「CRONジョブの新規作成」を行います。

シェルスクリプト名は先ほどの設置したshファイルのフルパスを記載してください。


      /virtual/(ユーザ名)/cron.sh


「分・時・日・月・曜日」には、CRONジョブを実行するタイミングを入力します。
最短1時間以上で設定が可能で、各値に合致したタイミングで処理を流します。
「分」には何らかの値を入力し、「時~曜日」のうち、どんなタイミングでも良いものは「*」を入力します。

例1:1時間に1回処理を行う。
分:0
時~曜日:*
例1は、各時間の0分(例:9時00分、10時00分…等)に処理を行う設定です。

例2:1日に1回処理を行う。
分:0
時:0
日~曜日:*
例2は、毎日0時0分に処理を行う設定です。

基本的にこれらの設定で完了です。

動かない場合は、再度Tera termにてshファイルやphpファイルを実行してみて確認したり、
shファイルの文字コード、改行コード等を確認してください。

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

正式名称よく分かっていませんでしたが、「Summary Card」というんですね。
この「Summary Card」が、ずっと大きくて気になっていたんですが…

SnapCrab_Twitter_2020-5-30


調べたらlivedoorBlogの設定で小さくできました。

管理画面→ブログ設定→基本設定→Twitterカード表示形式
「with Large Image」でない方にすればいいと思います。(画像最下段)

ブログ情報基本設定_2020-5-30_12-23-24_No-00

蛇足ですが、併せて上のOGPと呼ばれる画像も、同じサイズでカスタマイズしてみました。



(追記:2020.5.30 12:35 まだ画像が反映されていない!)
(追記2:2020.5.31 23:16 いつの間にか反映されていました! 約1日ですね。)
このエントリーをはてなブックマークに追加 mixiチェック

戦国史同盟掲示板はphpbb3で運用しています。

パスワードを忘れた際のリセットフォームがありますが、叩いてみると「500 error」

気づきませんでした。もしかするとこれで諦めた方もおられるかもしれない…

結論から言うとバグだそうです。
直す方法は直接phpソースをいじるしかないようです。
Fix方法も記載されていましたので併せてご紹介します。ご参考になれば幸いです。



今は問題なく動いています。

なお、先日実施した国外IP除外の効果が出ているようで、全くスパムが来ていません。
取り急ぎ良かったです。


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

↑このページのトップヘ