この記事を読んでくれているということは、必然的にページの左にあるサイドバーも一応視界には入っているだろうという前提でお話ししますが……。
Twitterのタイムラインを表示するウィジェットをうちのサイトにも導入しました。
特にこだわりがあったわけではないんですけど、今やブログやホームページにソーシャルブックマークボタンを置くのは当たり前のこのご時世に、あかつきのお宿はそういうのとあまり関わっていませんでした。
でもまあ、不意に思いついたことがあったので、ちょっと今回導入してみました。そのうちここにもTwitterやFacebookのいいねボタンが置かれるかもしれないね、この調子だと。
といっても、別に難しいことはなかとです。
とりあえずここに行ってもらえば、あとは野となれ山となれ~です。
色やサイズを設定できるので、自分のサイトに合う色やサイズをカスタマイズしてもらえればと思います。
設定が終わったら「コードを取得」ってボタンがあるので、それをポチっとやれば、埋め込み用のJavascriptのコードが取得できますので、それを自分のサイトのソースに埋め込むだけです。
ちなみに、うちの場合はこんな感じのコードが埋め込まれてます。
ここでポイントなのが、PHPコードを埋め込んである部分。これが今回の肝の部分っす。
あ、ちなみに技術的な話はここまでなので、てめーの戯言など聞く耳は持たんって方は、また今度遊びに来てくれたら嬉しいっす。
一応内容はPHPでスクリプト組んだって話なんだけどねww
いろいろなサイトさんを覗かせてもらうと、主に自分のサイトに関係ある単語で検索しているのをよく見かけます。まあ、使い方としてはそれが正しいでしょう。特にウェブサービスを配信しているサイトなら、そのサービスがどれくらい使われているか、どんな評価をもらってるのかを見れますからね。
でもあかつきのお宿はそういうのないんで、できれば何か面白い単語を、しかもずっとその単語ではなく、定期的に検索する単語を変えてタイムライン取得したいな~って思ったんですよ。
で、思ったのが、検索ワードのランダム化。
上記のコードの中で、「search: ○○」って部分があるんですが、この○○のところに好きなワードを入れると、それで検索して結果を返してくれるようになってます。
なので、あらかじめ単語の候補配列みたいなのをPHPで作っといて、毎回ランダムにその配列の中から単語を一つ持って来てタイムラインを取得すれば、ちょっと面白いんじゃないかな~と思ったんですよ。
ちなみに、あかつきのお宿で小説や音楽を投稿したりブログを更新すると、Twitterで僕のアカウントがbotのごとく更新したぜ的なことをつぶやくんですが、そのときの定型文みたいなのはまさにそんな感じで、定型文用の配列を作ってそこから毎回ランダムにつぶやいてます。
どんな単語で検索したら面白いかしらん?
結局はそこですよね。主旨としては面白い単語や思わず「おお、こいつイケてる~ww」とか思いたくなってしまうツイートを上手いこと拾えるような上手い単語で上手いこと検索したいってのがあるんで、まず元になる単語を精査する必要があるわけですよ。
しかしこれが全く思いつかないww
いや、確かにね、どうしても困ったら最終的には下ネタに逃げれば良いんですけどね。でも何かそういうのあれじゃないですか。少なくともそれでごまかそうとしてる俺を見て「おお、こいつイケてる~ww」とはならないじゃないですか。いや、そうなることが目的じゃないですけどね。あくまでも面白いツイートを拾って表示するのが目的なので、俺自身は関係ないです。完全に他力本願な面白さです。
で、いろいろ考えた挙句、イケそうな単語は一つも思いつかなかったんで、考え方を変えることにしました。
で、ふと思ったんですが……
ひらがな(濁点やちっちゃい文字なども一つとしてカウントする)をランダムに3文字取って来て、それで意味のある単語ができる確率はどれくらい?
もし知ってる人がいたらぜひともその確率を教えてほしいのですけど、濁点なども一つとすると、ひらがなは全部で80文字。別に同じ文字が3つ並んでも問題ないので(むむむ、みたいに)パターンとしては80×80×80で512000通り……ですか? 合ってる?
かなりのパターン数ではあります。
でも、今ちょっと適当にひらがな3文字を思い浮かべてそれを順番変えたりしながら文字列にしてほしいんですけど、案外意味のある単語になりません? 意味のある単語って言い方だとちょっとあれかもしれないですけど、例えば「むむむ」だって、何か考え事してるときの唸り声として「むむむ……」みたいなの、ありそうじゃないですか。しかも今回は、フリーワード検索の単語としてその生成された単語を使うわけなので、早い話がその3文字で完結するような単語である必要すらないんですよ。
例えば、実際さっきランダム生成してるときに出て来た単語なんですけど「うだね」っていう文字があった場合、それで検索かければ、「ああ、そうだね」みたいなツイートもひっかかるわけですよ。だから1文字目が「を」や「ん」だっていい。「をここ」だって「これをここに……」みたいなツイートがあれば持ってこれるわけです。
そう考えたら512000通りのうち、8割以上の確率で何かしらのつぶやき拾ってこれるんじゃねーの? とか思ったんですよ。
これなら、常に面白いツイートが拾えるわけではないけど、試みとしては悪くない気がする、そう思ったんで、さっそくスクリプト組んでランダムに生成された3文字での検索を試してみました。
3文字で完結できる単語ができる確率すら結構高いと僕は思ってたんですけど、いざやってみたら、1件でもツイートを拾ってくれる単語がほとんどなかった。完全ランダムだからもちろんばらつきはあるけど、だいたい20回に1回くらいしかタイムラインを取得できない。8割以上の確率で拾って来れないってな結果になってしまいました。
だから、全部を均等に持ってくるようなやり方じゃなくて、使用頻度の高さを3段階くらいに分けて、文字列を生成すればそれなりに良い感じになるんじゃないかな~と思ったわけです、はい。
まあ、見てもらうほどの価値もないんですけど、最終的にできた関数の中身はこんな感じです。
だいたい90%くらいの確率で1軍の文字を使用して、10%くらいの確率で2軍の文字を使う。で、1%未満でめったにないんだけど、たま~に3軍の文字を使う。そんな感じです。
1軍と2軍の中身を変えたり確率を変えたりしながら適当に検証してたんですけど、これくらいのバランスなら、ほとんどの確率で何かしらのツイートがタイムラインに出るようになりました。
実際どうだろう、この振り分け。こんなのにアドバイスくださいってお願いするのは申し訳ないんですけど、誰か日本語にめっちゃ強い人で、この振り分けはもっとこうしたらいんじゃね? っていう意見があったら、ぜひともご一報ください。
で、あとそう。最初はひらがなだけで検索してたんですけど、カタカナも一緒に検索できれば幅が広がるんじゃね? って思って、生成された3文字をカタカナに変換してOR検索するようにしました。ウィジェットのところでmb_convert_kana()してるじゃないっすか。あれがそう。
初めにカタカナも対応しようと思った時は、time()関数を使ってカタカナに変換するしないってのを場合分けしてたんですけど、ORで両方一緒に検索した方がいいじゃんってなことになりまして(脳内会議で)、そうなりました。
ちなみに、3文字を生成する際、1文字目だけは強制的に1軍を使うようにしてます。さっき言ったみたいに「をここ」みたいな単語でも問題はないと思ってはいたんですけど、今回検証してみた限りでは、どうも1文字目に2軍や3軍の文字が来ると引っかかりにくいらしいっていう結果になったので、こうしました。
ふぐぎ
これだけでは意味のある単語には見えないですよね。
でもね、引っかかったんですよ。
それも「○○ふぐぎ○○」的なツイートじゃなくて、ただ一言だけ「ふぐぎ」ってつぶやいてるツイートが引っかかりやがった。しかもそれ1件だけww
俺がこのスクリプトを組んでランダム生成した際にふぐぎという単語が生まれることを想定していたかのようなつぶやき。世の中にはとんでもない天才がいたもんです。
ま、それを横で見ていた友人が、この事実に大変心が躍ったようで、そいつもふぐぎってつぶやいたので、今は2件ありますけどね。
そのうち検索結果に出て来なくなっちゃうと思うけど、今ならまだ2件見れます。
一応URL貼っときますわ。
http://twitter.com/#!/search/%E3%81%B5%E3%81%90%E3%81%8E
というわけで、試みとしてはなかなか良い結果に収まったのではないかと思っています。面白いツイートを拾うって主旨からはちょっと外れて、こんな文字で検索してこんなに引っかかるのかよっていう結果を見るのが面白いという方向にシフトしてしまいましたが、ま、結果オーライです。
あとはこれで、何だよこの文字列はって感じの単語で検索された時に素晴らしいツイートが表示されるのを楽しみに待つだけですね。
みなさんもこのサイト覗きに来た時に興味深い単語で興味深いツイートが引っかかってたら、そのときの単語をぜひ教えてくださいww
Twitterのタイムラインを表示するウィジェットをうちのサイトにも導入しました。
特にこだわりがあったわけではないんですけど、今やブログやホームページにソーシャルブックマークボタンを置くのは当たり前のこのご時世に、あかつきのお宿はそういうのとあまり関わっていませんでした。
でもまあ、不意に思いついたことがあったので、ちょっと今回導入してみました。そのうちここにもTwitterやFacebookのいいねボタンが置かれるかもしれないね、この調子だと。
ウィジェットの設置方法
一応、開発技術のカテゴリがついてる記事なので、自分のサイトに設置する方法についても述べときまっしょい。といっても、別に難しいことはなかとです。
とりあえずここに行ってもらえば、あとは野となれ山となれ~です。
色やサイズを設定できるので、自分のサイトに合う色やサイズをカスタマイズしてもらえればと思います。
設定が終わったら「コードを取得」ってボタンがあるので、それをポチっとやれば、埋め込み用のJavascriptのコードが取得できますので、それを自分のサイトのソースに埋め込むだけです。
ちなみに、うちの場合はこんな感じのコードが埋め込まれてます。
<script src="http://widgets.twimg.com/j/2/widget.js"></script>
<script>
new TWTR.Widget({
version: 2,
type: 'search',
search: '<?php echo $tw_word ?> OR <?php echo mb_convert_kana($tw_word, 'C', 'UTF-8') ?>',
interval: 6000,
title: 'ランダムに仮名を3つ並べて<br />イケてるツイートを拾いたい',
subject: '',
width: 164,
height: 265,
theme: {
shell: {
background: '#666633',
color: '#ffffff'
},
tweets: {
background: '#ffffee',
color: '#483833',
links: '#1985b5'
}
},
features: {
scrollbar: false,
loop: true,
live: true,
hashtags: true,
timestamp: true,
avatars: true,
toptweets: true,
behavior: 'default'
}
}).render().start();
</script>
ここでポイントなのが、PHPコードを埋め込んである部分。これが今回の肝の部分っす。
あ、ちなみに技術的な話はここまでなので、てめーの戯言など聞く耳は持たんって方は、また今度遊びに来てくれたら嬉しいっす。
一応内容はPHPでスクリプト組んだって話なんだけどねww
やりたかったこと
今回、あかつきのお宿には「検索ウィジェット」ってのを置きました。ようはTwitterでのフリーワード検索ですね。検索したいワードを設定しておくと、Twitterでそれのフリーワード検索を行ったときに得られるタイムラインが表示されるって寸法です。いろいろなサイトさんを覗かせてもらうと、主に自分のサイトに関係ある単語で検索しているのをよく見かけます。まあ、使い方としてはそれが正しいでしょう。特にウェブサービスを配信しているサイトなら、そのサービスがどれくらい使われているか、どんな評価をもらってるのかを見れますからね。
でもあかつきのお宿はそういうのないんで、できれば何か面白い単語を、しかもずっとその単語ではなく、定期的に検索する単語を変えてタイムライン取得したいな~って思ったんですよ。
で、思ったのが、検索ワードのランダム化。
上記のコードの中で、「search: ○○」って部分があるんですが、この○○のところに好きなワードを入れると、それで検索して結果を返してくれるようになってます。
なので、あらかじめ単語の候補配列みたいなのをPHPで作っといて、毎回ランダムにその配列の中から単語を一つ持って来てタイムラインを取得すれば、ちょっと面白いんじゃないかな~と思ったんですよ。
ちなみに、あかつきのお宿で小説や音楽を投稿したりブログを更新すると、Twitterで僕のアカウントがbotのごとく更新したぜ的なことをつぶやくんですが、そのときの定型文みたいなのはまさにそんな感じで、定型文用の配列を作ってそこから毎回ランダムにつぶやいてます。
語彙のなさと発想力のなさが戦力の決定的な差
しかしそうなるとですね、一つ問題がありまして……。どんな単語で検索したら面白いかしらん?
結局はそこですよね。主旨としては面白い単語や思わず「おお、こいつイケてる~ww」とか思いたくなってしまうツイートを上手いこと拾えるような上手い単語で上手いこと検索したいってのがあるんで、まず元になる単語を精査する必要があるわけですよ。
しかしこれが全く思いつかないww
いや、確かにね、どうしても困ったら最終的には下ネタに逃げれば良いんですけどね。でも何かそういうのあれじゃないですか。少なくともそれでごまかそうとしてる俺を見て「おお、こいつイケてる~ww」とはならないじゃないですか。いや、そうなることが目的じゃないですけどね。あくまでも面白いツイートを拾って表示するのが目的なので、俺自身は関係ないです。完全に他力本願な面白さです。
で、いろいろ考えた挙句、イケそうな単語は一つも思いつかなかったんで、考え方を変えることにしました。
確率との微妙な勝負
もうね、こうなったら定型的な単語をランダムに検索するんじゃなくて、検索ワードそのものをシステムさんの方にランダムで生成してもらおうと。で、ふと思ったんですが……
ひらがな(濁点やちっちゃい文字なども一つとしてカウントする)をランダムに3文字取って来て、それで意味のある単語ができる確率はどれくらい?
もし知ってる人がいたらぜひともその確率を教えてほしいのですけど、濁点なども一つとすると、ひらがなは全部で80文字。別に同じ文字が3つ並んでも問題ないので(むむむ、みたいに)パターンとしては80×80×80で512000通り……ですか? 合ってる?
かなりのパターン数ではあります。
でも、今ちょっと適当にひらがな3文字を思い浮かべてそれを順番変えたりしながら文字列にしてほしいんですけど、案外意味のある単語になりません? 意味のある単語って言い方だとちょっとあれかもしれないですけど、例えば「むむむ」だって、何か考え事してるときの唸り声として「むむむ……」みたいなの、ありそうじゃないですか。しかも今回は、フリーワード検索の単語としてその生成された単語を使うわけなので、早い話がその3文字で完結するような単語である必要すらないんですよ。
例えば、実際さっきランダム生成してるときに出て来た単語なんですけど「うだね」っていう文字があった場合、それで検索かければ、「ああ、そうだね」みたいなツイートもひっかかるわけですよ。だから1文字目が「を」や「ん」だっていい。「をここ」だって「これをここに……」みたいなツイートがあれば持ってこれるわけです。
そう考えたら512000通りのうち、8割以上の確率で何かしらのつぶやき拾ってこれるんじゃねーの? とか思ったんですよ。
これなら、常に面白いツイートが拾えるわけではないけど、試みとしては悪くない気がする、そう思ったんで、さっそくスクリプト組んでランダムに生成された3文字での検索を試してみました。
現実はそんなに甘くなかった
結果から言うと、思ったよりダメだった。3文字で完結できる単語ができる確率すら結構高いと僕は思ってたんですけど、いざやってみたら、1件でもツイートを拾ってくれる単語がほとんどなかった。完全ランダムだからもちろんばらつきはあるけど、だいたい20回に1回くらいしかタイムラインを取得できない。8割以上の確率で拾って来れないってな結果になってしまいました。
確率を偏らせる
あまり意識しなくても想像はつくと思いますが、ひらがなって全部の文字が平均的な使用頻度なわけじゃないじゃないですか。「あ」とか「か」に比べたら、「ぬ」とか「ぴ」って、使用頻度低そうじゃないですか。「ぢ」なんてほんとそうだよ。今ぱっと思いつくだけでも「はなぢ」くらいしかない。しかも普通は「鼻血」って漢字で書くだろうしね。だから、全部を均等に持ってくるようなやり方じゃなくて、使用頻度の高さを3段階くらいに分けて、文字列を生成すればそれなりに良い感じになるんじゃないかな~と思ったわけです、はい。
まあ、見てもらうほどの価値もないんですけど、最終的にできた関数の中身はこんな感じです。
$len = 3;
$array = array(
'1' => array(
'あ', 'い', 'う', 'え', 'お',
'か', 'き', 'く', 'け', 'こ',
'さ', 'し', 'す', 'せ', 'そ',
'た', 'ち', 'つ', 'て', 'と',
'な', 'に', 'ぬ', 'ね', 'の',
'は', 'ひ', 'ふ', 'へ', 'ほ',
'ま', 'み', 'む', 'め', 'も',
'や', 'ゆ', 'よ',
'ら', 'り', 'る', 'れ', 'ろ',
'が', 'ぎ', 'ぐ', 'げ', 'ご',
'ざ', 'じ', 'ず', 'ぜ', 'ぞ',
'だ', 'で', 'ど',
'ん', 'っ',
),
'2' => array(
'わ', 'を',
'ぢ', 'づ',
'ば', 'び', 'ぶ', 'べ', 'ぼ',
'ぱ', 'ぴ', 'ぷ', 'ぺ', 'ぽ',
'ゃ', 'ゅ', 'ょ',
),
'3' => array(
'ぁ', 'ぃ', 'ぅ', 'ぇ', 'ぉ',
),
);
$str = '';
for($i = 1; $i <= $len; $i++) {
if($i == 1) {
$key = 1;
} else {
$per = mt_rand(0, 100);
if($per == 0) {
$key = 3;
} else if($per < 90) {
$key = 1;
} else {
$key = 2;
}
}
$rand = rand(0, count($array[$key]) - 1);
$str .= $array[$key][$rand];
}
return $str;
だいたい90%くらいの確率で1軍の文字を使用して、10%くらいの確率で2軍の文字を使う。で、1%未満でめったにないんだけど、たま~に3軍の文字を使う。そんな感じです。
1軍と2軍の中身を変えたり確率を変えたりしながら適当に検証してたんですけど、これくらいのバランスなら、ほとんどの確率で何かしらのツイートがタイムラインに出るようになりました。
実際どうだろう、この振り分け。こんなのにアドバイスくださいってお願いするのは申し訳ないんですけど、誰か日本語にめっちゃ強い人で、この振り分けはもっとこうしたらいんじゃね? っていう意見があったら、ぜひともご一報ください。
で、あとそう。最初はひらがなだけで検索してたんですけど、カタカナも一緒に検索できれば幅が広がるんじゃね? って思って、生成された3文字をカタカナに変換してOR検索するようにしました。ウィジェットのところでmb_convert_kana()してるじゃないっすか。あれがそう。
初めにカタカナも対応しようと思った時は、time()関数を使ってカタカナに変換するしないってのを場合分けしてたんですけど、ORで両方一緒に検索した方がいいじゃんってなことになりまして(脳内会議で)、そうなりました。
ちなみに、3文字を生成する際、1文字目だけは強制的に1軍を使うようにしてます。さっき言ったみたいに「をここ」みたいな単語でも問題はないと思ってはいたんですけど、今回検証してみた限りでは、どうも1文字目に2軍や3軍の文字が来ると引っかかりにくいらしいっていう結果になったので、こうしました。
そして伝説へ
ってなことで非常にどうでもいいスクリプトが完成したんですが、何回かリロードしながらタイムラインを眺めていた結果、俺的にMVPだった単語はこれです。ふぐぎ
これだけでは意味のある単語には見えないですよね。
でもね、引っかかったんですよ。
それも「○○ふぐぎ○○」的なツイートじゃなくて、ただ一言だけ「ふぐぎ」ってつぶやいてるツイートが引っかかりやがった。しかもそれ1件だけww
俺がこのスクリプトを組んでランダム生成した際にふぐぎという単語が生まれることを想定していたかのようなつぶやき。世の中にはとんでもない天才がいたもんです。
ま、それを横で見ていた友人が、この事実に大変心が躍ったようで、そいつもふぐぎってつぶやいたので、今は2件ありますけどね。
そのうち検索結果に出て来なくなっちゃうと思うけど、今ならまだ2件見れます。
一応URL貼っときますわ。
http://twitter.com/#!/search/%E3%81%B5%E3%81%90%E3%81%8E
というわけで、試みとしてはなかなか良い結果に収まったのではないかと思っています。面白いツイートを拾うって主旨からはちょっと外れて、こんな文字で検索してこんなに引っかかるのかよっていう結果を見るのが面白いという方向にシフトしてしまいましたが、ま、結果オーライです。
あとはこれで、何だよこの文字列はって感じの単語で検索された時に素晴らしいツイートが表示されるのを楽しみに待つだけですね。
みなさんもこのサイト覗きに来た時に興味深い単語で興味深いツイートが引っかかってたら、そのときの単語をぜひ教えてくださいww