Tag: PHP’

ゴーストからTwitterに投稿する(其の参―中級編)

 - by Don

目次

準備

上級編を見てわかる通り、普通にやると準備が大変です。なので中級編では筆者が準備した環境を中継して投稿する方法を紹介します。

「概要」で説明した通り、以下のものが必要になります。

  • BOT用Twitterアカウント
  • Twitter APIの認証キー(2つ)※Twitter開発者登録は不要
    • ACCESS_TOKEN(アプリに対しアカウント毎に割り当てられる)
    • ACCESS_TOKEN_SECRET(アプリに対しアカウント毎に割り当てられる)
  • PHPが使用可能なサーバ(PHP7でなくても可)

BOT用TwitterアカウントとPHPが使用可能なサーバは例によって各自用意してください。

Twitter APIの認証キー(2つ)は以下のリンクから取得してきてください。

UKABOT

適当な名前のPHPファイルを作成してサーバにアップロードします。今回はsample.phpとしました。このファイルにコードを記述していきます。

<?php
define('ACCESS_TOKEN', 'XXXXXXXXXXXXXXXXXXXX');
define('ACCESS_TOKEN_SECRET', 'XXXXXXXXXXXXXXXXXXXX');

$url = 'http://nikolat.starfree.jp/rentalbot/sendtweet.php';
$mes = 'サーバから送信テスト';
$post_data = array('access_token' => ACCESS_TOKEN, 'access_token_secret' => ACCESS_TOKEN_SECRET, 'status' => $mes);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($post_data));
$res =  curl_exec($ch);
curl_close($ch); 

header('Content-Type: text/plain; charset=UTF-8');
print 'おしまい';

文字コードはUTF-8にしておきましょう。XXXの部分は自身が取得した2つのAPIの認証キーに書き換えてください。これを保存してWebブラウザからこのphpファイルがあるURLにアクセスしてみましょう。ブラウザには「おしまい」と表示され、BOTのアカウントに「サーバから送信テスト」と投稿されるはずです。

今はWebブラウザからアクセスしましたが、最終的にはSSPからアクセスし、メッセージを転送することを目標としています。

送信するテキストの部分を以下のように書き換えましょう。

<?php
define('ACCESS_TOKEN', 'XXXXXXXXXXXXXXXXXXXX');
define('ACCESS_TOKEN_SECRET', 'XXXXXXXXXXXXXXXXXXXX');

$url = 'http://nikolat.starfree.jp/rentalbot/sendtweet.php';
$mes = $_POST['message'];
$post_data = array('access_token' => ACCESS_TOKEN, 'access_token_secret' => ACCESS_TOKEN_SECRET, 'status' => $mes);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($post_data));
$res =  curl_exec($ch);
curl_close($ch); 

header('Content-Type: text/plain; charset=UTF-8');
print 'おしまい';

そしてSSPから以下のSakuraScriptを入力します。

\![execute,http-post,【URL】,--param=message=SSPから送信テスト]

【URL】は先ほどWebブラウザからアクセスしたphpファイルがあるURLに置き換えてください。BOTのアカウントに「SSPから送信テスト」と投稿されるはずです。

これでゴーストからTwitterに投稿することができました。

エラー処理

上記のコードは最小限の構成になっています。エラー処理くらいは加えたほうが良いでしょう。

<?php
header('Content-Type: text/plain; charset=UTF-8');

define('ACCESS_TOKEN', 'XXXXXXXXXXXXXXXXXXXX');
define('ACCESS_TOKEN_SECRET', 'XXXXXXXXXXXXXXXXXXXX');

$url = 'http://nikolat.starfree.jp/rentalbot/sendtweet.php';
$key = 'message';
if (!isset($_POST[$key])) {
  print 'メッセージのパラメータ名が違います。';
  exit();
}
$mes = $_POST[$key];
$post_data = array('access_token' => ACCESS_TOKEN, 'access_token_secret' => ACCESS_TOKEN_SECRET, 'status' => $mes);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($post_data));
$res =  curl_exec($ch);
if(curl_error($ch)) {
  print curl_error($ch);
} else {
  print $res;
}
curl_close($ch); 

ここで表示されるはずのメッセージはSakuraScriptを実行したゴーストのフォルダ内 ghost\master\var\sample.php に格納されています。

注意事項

ここで解説した方法は筆者のサーバを経由して投稿する方法になります。筆者がサーバの利用継続手続きを失念したり、筆者のTwitterアカウントが凍結されたりすれば動かなくなりますが、泣かないでください。

ゴーストからTwitterに投稿する(其の弐―上級編)

 - by Don

目次

準備

「概要」で説明した通り、以下のものが必要になります。

  • BOT用Twitterアカウント
  • Twitter APIの認証キー(4つ)※Twitter開発者登録が必要
    • CONSUMER_KEY(アプリ毎に割り当てられる)
    • CONSUMER_SECRET(アプリ毎に割り当てられる)
    • ACCESS_TOKEN(アプリに対しアカウント毎に割り当てられる)
    • ACCESS_TOKEN_SECRET(アプリに対しアカウント毎に割り当てられる)
  • PHP7が使用可能なサーバ
  • OAuthライブラリ(TwitterOAuth)

BOT用Twitterアカウントは各自用意してください。

Twitter APIの認証キー取得についても、Web上に解説記事がたくさんあるのでここで解説することはしません。筆者がざっと探してみた限りでは以下の記事がわかりやすいと思いました。BOTに投稿させるため、BOT自身のアカウントで登録した方が良いです。※Twitterアプリ開発経験者や複数BOT作成予定の人はこの限りではありません

PHP7が使用可能なサーバも各自用意してください。筆者は駄でべWikiを参考にスターサーバー(フリープラン)を利用しています。(PHPのバージョンをしっかり確認してください。PHP5ではダメです。)

最後にTwitterOAuthの入手ですが、ここでは最新版ではなくversion 1.1.0をこちらから入手します。

twitteroauth

理由は、最新版では依存モジュールがあって色々めんどくさいからです。動けばいい、の精神で古いバージョンを使用します。

展開したフォルダはtwitteroauthとリネームしてサーバにアップロードします。同一ディレクトリ内に適当な名前のPHPファイルを作成します。

directory-sample

今回はsample.phpとしました。このファイルにコードを記述していきます。

<?php
require 'twitteroauth/autoload.php';
use Abraham\TwitterOAuth\TwitterOAuth;

define('CONSUMER_KEY', 'XXXXXXXXXXXXXXXXXXXX');
define('CONSUMER_SECRET', 'XXXXXXXXXXXXXXXXXXXX');
define('ACCESS_TOKEN', 'XXXXXXXXXXXXXXXXXXXX');
define('ACCESS_TOKEN_SECRET', 'XXXXXXXXXXXXXXXXXXXX');

$mes = 'サーバから送信テスト';

$twitter = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, ACCESS_TOKEN, ACCESS_TOKEN_SECRET);

$res = $twitter->post('statuses/update', array('status' => $mes));
print 'おしまい';

文字コードはUTF-8にしておきましょう。XXXの部分は自身が取得した4つのAPIの認証キーに書き換えてください。これを保存してWebブラウザからこのphpファイルがあるURLにアクセスしてみましょう。ブラウザには「おしまい」と表示され、BOTのアカウントに「サーバから送信テスト」と投稿されるはずです。

今はWebブラウザからアクセスしましたが、最終的にはSSPからアクセスし、メッセージを転送することを目標としています。

送信するテキストの部分を以下のように書き換えましょう。

<?php
require 'twitteroauth/autoload.php';
use Abraham\TwitterOAuth\TwitterOAuth;

define('CONSUMER_KEY', 'XXXXXXXXXXXXXXXXXXXX');
define('CONSUMER_SECRET', 'XXXXXXXXXXXXXXXXXXXX');
define('ACCESS_TOKEN', 'XXXXXXXXXXXXXXXXXXXX');
define('ACCESS_TOKEN_SECRET', 'XXXXXXXXXXXXXXXXXXXX');

$mes = $_POST['message'];

$twitter = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, ACCESS_TOKEN, ACCESS_TOKEN_SECRET);
 
$res = $twitter->post('statuses/update', array('status' => $mes));
print 'おしまい';

そしてSSPから以下のSakuraScriptを入力します。

\![execute,http-post,【URL】,--param=message=SSPから送信テスト]

【URL】は先ほどWebブラウザからアクセスしたphpファイルがあるURLに置き換えてください。BOTのアカウントに「SSPから送信テスト」と投稿されるはずです。

これでゴーストからTwitterに投稿することができました。

エラー処理

上記のコードは最小限の構成になっています。エラー処理くらいは加えたほうが良いでしょう。

<?php
require 'twitteroauth/autoload.php';
use Abraham\TwitterOAuth\TwitterOAuth;

define('CONSUMER_KEY', 'XXXXXXXXXXXXXXXXXXXX');
define('CONSUMER_SECRET', 'XXXXXXXXXXXXXXXXXXXX');
define('ACCESS_TOKEN', 'XXXXXXXXXXXXXXXXXXXX');
define('ACCESS_TOKEN_SECRET', 'XXXXXXXXXXXXXXXXXXXX');

$key = 'message';
if (!isset($_POST[$key])) {
  print 'メッセージのパラメータ名が違います。';
  exit();
}
$mes = $_POST[$key];

$twitter = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, ACCESS_TOKEN, ACCESS_TOKEN_SECRET);
 
$res = $twitter->post('statuses/update', array('status' => $mes));

if($twitter->getLastHttpCode() == 200) {
  print '投稿が完了しました。';
} else {
  print '投稿に失敗しました。';
}

ここで表示されるはずのメッセージはSakuraScriptを実行したゴーストのフォルダ内 ghost\master\var\sample.php に格納されています。

ゴーストからTwitterに投稿する(其の壱―概要)

 - by Don

本稿では伺かのゴーストからTwitterに投稿する方法について記述します。

ゴーストからのweb拍手送信を応用した内容となっています。
こちらを実践したことがある、または仕組みが理解できることを前提としています。

本稿は以下のように3部に分けて解説していきます。

「概要」では、大まかな仕組みと流れについて説明していきます。

「上級編」では、具体的に必要な準備や記述すべきコードを説明していきます。これが基本であり理想とされる対応となります。

「中級編」では、「上級編」で必要とされた準備のうちの一部を筆者が肩代わりすることで少しだけ敷居を下げた方法を説明していきます。本格的に対応する前に試用したい場合などにご利用ください。

ゴーストから自分の用意したサーバにメッセージを送信する

ゴーストからのweb拍手送信の動作原理を解説すると、SSPのSakuraScriptである\![execute,http-post]を使用してサーバにメッセージを送信し、サーバ側でメッセージを保存することでゴースト作者が閲覧できるようになっています。

send-webclap

ゴーストからTwitterへの投稿は、これの応用で、このサーバからTwitterにメッセージを転送することで実現します。

send-to-twitter

上級編

「上級編」では、PHP7を使用してTwitterにメッセージを転送するプログラムの記述を解説します。そのため以下のものを準備する必要があります。

  • BOT用Twitterアカウント
  • Twitter APIの認証キー(4つ)※Twitter開発者登録が必要
    • CONSUMER_KEY(アプリ毎に割り当てられる)
    • CONSUMER_SECRET(アプリ毎に割り当てられる)
    • ACCESS_TOKEN(アプリに対しアカウント毎に割り当てられる)
    • ACCESS_TOKEN_SECRET(アプリに対しアカウント毎に割り当てられる)
  • PHP7が使用可能なサーバ
  • OAuthライブラリ(TwitterOAuth)

※PHPとはWebプログラミングに使われるプログラミング言語の一つで、伺かで言えば「里々」みたいなものです。コピペで動くように解説するつもりなので必ずしもPHPに習熟する必要はありませんが、自分流にカスタマイズする場合はある程度習得することが望ましいです。なお、筆者はあまりPHPに詳しくありません。

中級編

「中級編」では、筆者のBOT用登録済みアプリを使って筆者サーバを経由して投稿する形式を取ります。そのため必要な準備は以下のものだけになります。

  • BOT用Twitterアカウント
  • Twitter APIの認証キー(2つ)※Twitter開発者登録は不要
    • ACCESS_TOKEN(アプリに対しアカウント毎に割り当てられる)
    • ACCESS_TOKEN_SECRET(アプリに対しアカウント毎に割り当てられる)
  • PHPが使用可能なサーバ(PHP7でなくても可)

forward-to-twitter

DokuWikiを使ってみる

 - by Don

情報を書き溜めておくならブログよりもWikiの方が良さそうです。

自分のコントロール下に情報を置いておきたい場合は自分で設置するしかないなと思って色々試してみました。

日本語でそこそこ使えるWiki

試したのは以下の3つです。

PukiWiki

みんな大好きPukiWiki。伺か関連のサイトとしては駄でべWiki里々Wiki文屋など。大人気です。

PHP製。データベース不要。日本製。

そこそこシンプルな作りが魅力的ではあるけれど、最終更新が2006年ってかなり不安です。

MediaWiki

Wikipediaで使われているWikiエンジンです。超重量級。後ろ盾が確かな分、バージョンアップやバグフィックスも盛んです。

PHP製。データベースが別途必要。リソースは英語ベース、日本語のリソースも充実。

PHP Fogでデフォルトで用意されているので使ってみたけれど、最初のカスタマイズで疲れ果てました。何故か画像のアップロードでサムネイルが作成されないエラーが。サムネイルとか要らない…オプションで無効化できないの…疲れた…。

DokuWiki

名前は聞いたことがあったけど、使ったことはなかったので試してみました。

PHP製。データベース不要。リソースは英語ベース、日本語のリソースもまずまず。

超シンプル。インストール後の設定もURLの正規化くらいであとはデフォルトで十分使えるレベル。ストレスフルなまでのユーザビリティの低さ加減を除けは全く不満はないです。あまりのストレスに耐え切れずテンプレートを探してみましたが輪をかけて使いづらいものがザクザク引っかかりました。唯一まともだと思ったのがarctic-mbo Templateです。大変気に入りました。しばらくこれで使っていこうと思います。

PHP Fogに設置してみた

PHP Fogはフリーでアプリケーションが3つ作れます。此処のWordPressの他にあと2つ残っているのでDokuWiki用に1つ作ってみました。

  • すななみ

たいして書き溜めておくようなこともないですが、自分専用ということでまずは運用してみます。

iPhone用の表示とAutoPagerize対応

 - by Don

WPtouch

WordPressをiPhone用に表示するplugin。Free版を入れてみましたが、なかなかきれいに表示してくれます。pluginを有効にするだけという手軽さで、大変気に入りました。

wptouch

wptouch


AutoPagerize対応

他のサイトでもさんざんやってきたので今更ですが、WordPress特有の関数とかもあるので軽くメモ。

single.phpはhead内に既にrel="prev"とrel="next"が入ってるのでclass="autopagerize_page_element"を適当なところに入れるだけで大丈夫。

index.phpに古いページへのリンクがprevious_posts_linkとかいう関数で挿入されていて、簡単にclassを付加できない。そこでfunctions.php内でこんな処理を走らせると良いらしい。

function my_auto_pagerize_rel_filter($content) {
    return "{$content} rel="next"";
}
add_filter('next_posts_link_attributes', 'my_auto_pagerize_rel_filter');

あとはautopagerize_page_elementやらautopagerize_insert_beforeやらを好きなところに入れて終わり。

トラックバックの表示

 - by Don

今日はトラックバックに関連する設定をしていました。

まずGet Recent Commentsをインストール。これはサイドバーにcommentとtrackbackを分離してウィジェットで表示してくれるプラグインです(標準ではcommentとtrackbackが一緒くたに表示されてしまいます)。

ただ、このままだとtrackbackのウィジェットのidがcommentのidと被ってしまいますのでget-recent-comments.phpの該当部分を以下のように修正。

function kjgrc_create_recent_trackbacks( $caller = '')
{
	global $kjgrc_we_are_a_widget,$kjgrc_widget_args;

	// $entries = kjgrc_get_entries($max_comments,$chars_per_comment,$chars_per_word,$format,$query,0,$caller);
	$entries = kjgrc_get_comments2('grt',$caller);
	// If we are a widget: Also care for the title
	if ($kjgrc_we_are_a_widget == TRUE) {
		extract($kjgrc_widget_args);
		$entries = $before_widget . $before_title . kjgrc_get_option("grt","sidebar_title") . $after_title .
		'<div id="get_recent_trackbacks_wrap"><ul>' .
		$entries .
		'</ul></div>' .
		$after_widget;
		$entries = str_replace('id="get-recent-comments"', 'id="get-recent-trackbacks"', $entries);
		return $entries;
	}
	return $entries;
}

次に単一記事に対するtrackback数の表示。comment数は"n comments"とかって表示されてますけどtrackback数も表示したいので。

まず、Trackping Separatorをインストール。

functions.phpあたりに以下の関数を追加。

function trackbacks_popup_link() {
	$c = trackpings('count');
	if ($c === 0) {
		$mes = 'No trackbacks';
	} else if ($c === 1) {
		$mes = '1 trackback';
	} else {
		$mes = $c.' trackbacks';
	}
	echo '<a href="';
	the_permalink();
	echo '#trackback" title="Trackback">'.$mes.' »</a>';
}

index.php, archive.php, single.phpのcomment数を表示している部分の後でこの関数を呼び出します。

しかし、このままでは肝心のtrackbackリストそのものが表示されていません。

comments.phpの最後にテーマのcommentsの部分を参考にしながら追加します。

<?php $trackbacks = trackpings(); ?>
<?php if ($trackbacks) : ?>
<aside id="trackback">
<h2>trackbacks</h2>
	<ol class="trackbacklist">
	<?php foreach ($trackbacks as $comment) : ?>
	<li class="<?php echo $oddcomment; ?>" id="comment-<?php comment_ID() ?>">
		<div class="quote"><br /><?php comment_text() ?></div>
	<?php comment_author_link() ?> on <a href="#comment-<?php comment_ID() ?>" title=""><?php comment_date('F jS, Y') ?> at <?php comment_time() ?> <?php edit_comment_link('edit','  ',''); ?></a>
	</li>
	<?php endforeach; ?>
	</ol>
</aside>
<?php endif; ?>

これでようやくトラックバックが表示されます。疲れた。

TwitterのBOTを引っ越した

 - by Don

land.toサーバのPHPで動かしていたTwitter BOT達(@mesoramen,@denpadokei)をここに移しました。

cloudControlにはcronを動かすオプションは探したけどないっぽいですね。今までFree Web Cron Serviceってところに頼ってましたがどうも重くて使いづらいので、Google App Engineのcronを使ってアクセスすることにしました。使えるツールを増やしておくと出来ることが増えて良いですね。

WordPressの設定

 - by Don

右も左もわからないので他所様の設定を参考にしてみました。

WordPressでブログを作ったらまずやる26項目―SEO・アクセスアップのためのカスタマイズ | 清音のSEOブログ現在アクセスできない状態のようです。

特にSEOバリバリにする気はないけれど、閲覧者にとって見やすいことと、自分が使いやすいことに重点を置いてみます。

テーマは"HTML5"でダッシュボードから検索したらFreeDreamっていうのが引っ掛かって気に入ったのでこれに決めました。

インストール&有効にしたプラグインは以下の通りです。まだ使い方がわかってないのもあります。

  • All in One SEO Pack
  • Canonical URL’s
  • Dagon Design Sitemap Generator
  • FLV Embed
  • Google Analytics
  • Google XML Sitemaps
  • Ktai Style
  • SI CAPTCHA Anti-Spam
  • WP Contact Form III

あと、単一記事の投稿(single.php)を編集してトラックバックURLを表示してみました(comments.phpの方が良かったのかな?)。以下のコードを適当な場所に挿入します。

<?php if ( pings_open() ) : ?>
<br />
TrackBack <abbr title="Universal Resource Locator">URL</abbr> : <input type="text" name="trackback_url" size="80" value="<?php trackback_url() ?>" readonly="readonly" class="trackback-url" onfocus="this.select()" />
<br />
<?php endif; ?>

あと、テーマ自体のバグで、<article id="article"><header id="titre">っていうのが各所に見られたので、<article class="article"><header class="title">に変更して該当するCSSも修正しました。titreはtitleのスペルミスかな。

最後に「ユーザー>あなたのプロフィール」から"ビジュアルリッチエディターを使用しない"にチェック。わざわざ&quot;って書いたのがいちいち全部"に戻されて困るので。

cloudControllのアカウントを作ってみた

 - by Don

PHPのPaasらしいcloudControllのアカウントを作ってみました。

早速WordPressをインストール。まともに使ったことなかったけど高機能ですね。

とりあえず他所のサーバのPHPで動かしていたTwitterBotなどをこちらに移植してみようと考えています。

使い心地が良ければ伺か用のブログもこちらに移転するかも。