不撓不屈

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

php

備忘のため投稿します。

使える文字、使えない文字色々あるようですが、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チェック

↑このページのトップヘ