思いつきで作りましたが、そのまま消滅させるのも僅かにもったいないので、
寝る前に公開しておきます。
入力した文章を英訳、もしくは和訳して、そのままTwitterに送れるツールです。

翻訳してTwitter
翻訳してTwitter(http://tw.17sai.jp/)
サーバーの共有SSLが使えるので、鍵マークが好きな方はどうぞ↓。
翻訳してTwitter[SSL](https://ss1.coressl.jp/tw.17sai.jp/)
※TwitterのID、PASSを使う場合は、何かあっても責任取れないので、気をつけて使わないで下さい。
Googleの翻訳できるAPIをいじってみたら、文章、特に日本語が超約というかダメ約で、
変な方向に面白かったので、最近流行のTwitterとあわせてみたらいいんじゃね?っていう
そんな感じの作りはじめだったと思います。覚えてないけど。今考えた。
英語の勉強に使えるってのは、作りはじめてから、さらにしばらくして思いついた後付設定です。
前述したように、超約なのであんまり役に立たないと思います。
英語ってなってるけど、GoogleAPIの方で対応してるのは一応選択できます。
正しく訳せているのかは全く分かりませんが。
どれだけの情熱と手間がかかっているかは、デザインとタイトルを見ればお分かりいただけると
思います。
その分、セキュリティやバグが心配なので、クッキーも使ってないし、TwitterのID&PASSも
受け次第保存などはせず、そのまま送ってます。
どうこうしてほしいとか、詳しい仕組み知りたいとかあったらコメントで教えてください。
Posted in
PHP,
javascript,
プログラム at 11月 29th, 2009.
No Comments.
PHPでテキストを画像に書き出す
imagettftextですが、
そのままでは改行が出来ないのが不便でした。
そこで改行させるスクリプトを何とか書いてみました。
仕組みは、テキストボックスの幅や高さを取得する
imagettfbboxを使い、
文を一字ずつ増やしながら幅を取得し、それが指定の幅まできたら
下にもう一つテキストボックスを追加してまた一字ずつ追加して・・・を繰り返します。
実行サンプル

ソースコード
http://17sai.jp/sample/linebreak.txt
サンプルはフォントの箇所だけ自分で用意したフォントのパスに変えてください。
上のサンプルではフリーの毛筆フォント、
青柳衡山毛筆フォントを使用させていただいています。
汚いソースなので、好きに改造してください。
なんかバグや改善点があれば教えてください。
< ?php
//imagettftextで自動で改行させるサンプルです。ろっく(http://petitec.17sai.jp/)091114
$im = imagecreatetruecolor(500, 300);// 画像を作成
$black = imagecolorallocate($im, 30, 30, 30);//色指定
$white = imagecolorallocate($im, 250, 250, 250);
imagefilledrectangle($im, 0, 0, 500, 300, $white);// 背景を白に
$font = 'AoyagiKouzanFont2.ttf';// フォントファイルへのパス
$text ='吾輩(わがはい)は猫である。名前はまだ無い。どこで生れたかとんと見当(けんとう)がつかぬ。何でも薄暗いじめじめした所でニャーニャー泣いていた事だけは記憶している。吾輩はここで始めて人間というものを見た。しかもあとで聞くとそれは書生という人間中で一番獰悪(どうあく)な種族であったそうだ。この書生というのは時々我々を捕(つかま)えて煮(に)て食うという話である。';
//使用するテキスト
$FontSize=16;//フォントサイズ
$Rotation=0;//角度 90以上にすると幅が増えず、whileから抜け出せなくなるので注意
$XPositon=10;//開始x座標
$YPositon=0;//開始y座標
$LineMax=15;//行の最大値
$LineHeight=32;//行の高さ
$MaxWidth=500-$FontSize*2-$XPositon;//テキストの最大幅(px)フォントによる誤差が大きいので調整が必要
$InitialLeng=7;//文字数の初期値。大きいほどwhileループが少なくて済むが、大きすぎるとはみ出る。
for ($i=0; $i<$LineMax; $i++)
{
$textwidth[$i]=0;
$text_leng[$i]=$InitialLeng;
$cut_text[$i]=mb_substr($text, 0, $text_leng[$i]);
//行の幅が$MaxWidthを超えるまで一字ずつ増やしていく
while ($textwidth[$i]<$MaxWidth)
{
$TextPositon[$i]=0;
for ($o=0; $o<$i; $o++)
{
$TextPositon[$i]+=$text_leng[$o];
}
if (mb_strlen($text)>$TextPositon[$i]+$text_leng[$i]-$i)
{//最後まで文を切り分けたらbreak
$text_leng[$i]++;
$cut_text[$i]=mb_substr($text, $TextPositon[$i], $text_leng[$i]);
$bbox[$i] = imagettfbbox($FontSize, $Rotation, $font, $cut_text[$i]);
$textwidth[$i] =$bbox[$i][2];//テキストボックスの右下の座標を取得
}
else
{
break 2;
}
}
}
for ($p=0; $p
ソースコード貼り付けるとWordpressの校正機能が無駄に働いてちょっとうざい。
Posted in
PHP at 11月 14th, 2009.
1 Comment.
私がjsやPHPで車輪の再発明以下の何かを作ったとき、
そんなもんでもせっかくだからブログにアップしようと思うんですが、やろうと思うとすごい大変。
異聞が分からないときにググって、必要な情報を見つけたとき、説明不足だったり、
コピペしても動かなかったときは、いらついてしまうんですが、
いざ自分で、分かりやすい説明で、汎用性もあり、難しい所はコメント振ってあって
コピペしてそのまま使えるようなプログラムを公開するとなると
その大変さを思い知ります。過去の記事を見れば分かりにくさがよく分かる。
何かをしたいとき、出来ないとき、自分じゃ分からないので検索し、いいブログやサイトを見つけて
解決できた時は非常に助かるし、はっきりいって検索エンジンとその先のブログ等が無ければ、
自分は何も作れないと思いますが、その便利さの裏には凄い方々の凄い優しさみたいなのがあるんですね。
自分がその凄い方々のようには、まだまだ慣れそうにはありません。
絵や感想などの文章だと、そんな迷惑もかけず自己満で完結できると思うんですが、
プログラムやシステム系のような実務的なものはそうも行きませんね。
Posted in
プログラム at 11月 8th, 2009.
1 Comment.
HPのパーツとして30分ぐらいで作ったもの。
このままじゃ他で使えないレベル。エラー対策皆無です。
RSSの解析に
MagpieRSSと
キャッシュにPearの
CacheLiteを使ってます。
HTMLをなぜかolではなく、dlで組んでるのは、たしか本文の一部(items[$i]['description'])の箇所を
ddで表示させようかと思ってたため。
<?php
function getrss(){
include_once('magpierss/rss_fetch.inc');
//Magpie RSS使います http://magpierss.sourceforge.net/
$rss='http://petitec.17sai.jp/feed';
//RSSのURLを指定。Magpie RSSを使ってタイトルや概要などを読み込み
if($xmlobj=@fetch_rss($rss)){
$text='';
$title='';
for($i=0;$iitems);$i++){
$text[$i]=$xmlobj->items[$i]['description'];
$title[$i]=$xmlobj->items[$i]['title'];
$link[$i]=$xmlobj->items[$i]['link'];
$date[$i]=eregi_replace('20([0-9]{2})\-([0-9]{2})\-([0-9]{2})(.+)','\1/\2/\3',$xmlobj->items[$i]['dc']['date']);
}
if($title[0]){
$code='
';
for($i=0;$i
$code.="
- {$date[$i]} {$title[$i]}";
}
$code.='
';
}else{
$code='なんかダメでした';
}
return $code;
}
}
require_once('Cache/Lite.php');
//PEARのCahce Liteも使います。
$CacheTime=60*5;
// キャッシュの保存場所とキャッシュの生存期間を指定(秒)
$options = array(
'cacheDir' => 'cache/',
'lifeTime' => $CacheTime
);
$Cache_Lite = new Cache_Lite($options);
$id = 'blogrss';
// 指定id のキャッシュが存在するかどうか
if ($data = $Cache_Lite->get($id)) {
// キャッシュがあるのでキャッシュされたデータを表示
$code =$data;
$mess='キャッシュ利用';
// キャッシュがなかったら本来の処理を実行
} else {
$code =getrss();
$mess='キャッシュが古いか、無いので新たに取得';
// データをキャッシュする
$Cache_Lite->save($code);
}
print $code;
これを表示させるときは、jQueryを使ったjsでAJAX読み込みしました。
$(document).ready(function() {
$('#blog-load').load('blog.php');
});
読込先の#blog-loadのdivは
<div id="blogload">
<a href="ブログのURL">「ブログタイトル」</a>読み込み中...
</div>
のような感じにしとくとPHPがダメだったなどの問題発生時に最低限の対応にはなって良いかなと思った。
HTMLも空divにもならないし。
Posted in
PHP,
プログラム at 11月 8th, 2009.
No Comments.
FC2ブログのRSSなんかで使われている
W3C Date and Time Formats (W3CDTF) を
YY/MM/DDなどの一般的な形式に変換するのに少々てこずったのでメモ。
時間は諦めました。
$w3cdateに「2009-10-31T12:00.00+09:00」みたいなやつを代入。
2100年以降とか時間ないタイプに対応してなかったりいい加減・・・。
$yymmdd=eregi_replace('20([0-9]{2})\-([0-9]{2})\-([0-9]{2})(.+)','\1/\2/\3',$w3cdate);
→出力例:09/10/31
Posted in
PHP at 10月 31st, 2009.
2 Comments.