GoogleのtranslateAPIキーを取得し、下記サイトなどを参考にPHPにて翻訳を試しています。 Add Star
http://kaedetrans.blogspot.jp/2011/12/google-translate-api-rest-7.html
しかしAPIのコール一回あたりGETであれば2Kほど、POSTでも5K程が上限です。
その際、文字を分割したりコードを途中で区切り、分割翻訳、最後に結合したいと思います。
しかし制限文字範囲内で一番近い句点(。)で区切るところまでは出来たのですが、HTMLなども入ってくるとよく分からず…
HTML混じりの文章を、
・タグが途中で切れない
・文章が途中で切れない
・指定文字範囲内に日本語がない(長いHTMLしかない)場合、及び日本語しかないもエラーを起こさない
という分割をPHPで実現する方法はありますでしょうか。
コピペで使えるような具体的なPHPコードを教えてください。
GoogleのtranslateAPI
その細かい仕様を知らないので、質問にある仕様の範囲内で回答します。
(申し訳ないですが、難しい仕様がある場合、お助けできないかもしれません)
また、ご質問の前提の確認ですが、テキストにHTMLのタグが入ったまま、
先方のAPIに渡してもタグが破壊されず、あらかじめタグを除去する必要がない仕様ですね?
以下その前提で回答します。
制限文字範囲内で一番近い句点(。)で区切るところまでは出来た
句点だとタグの中に入ってしまう場合がありますね。
それ以外の方法で、パッと思いついた中で一番単純なのは、
「<」「>」(HTMLならエスケープされているはず)を文字列探索する方法です。
具体的には、文字列を先頭から2千字とか、上限範囲となる末尾から探索して、
「<」が先に見つかればその左側、「>」が先に見つかればその右側で切れば、
・タグが途中で切れない ・文章が途中で切れない
の要件は満たします(正しいタグ付けの場合)。
・指定文字範囲内に日本語がない
そのときは(日本語→英語の場合)翻訳する必要がないので、
タグが終わるまでの部分をAPIに渡さず、直接表示します。
日本語しかない
その場合は句点で区切ることになります。
また、上述の「>」を先に見つけた場合、
右側を句点で探すと、より長く区切れます。
>具体的なPHPコード
以下のサンプルコードは、HTMLのタグを探すサンプルになります。
オンラインコードサービスでですが、動作を確認しました。
要点をイメージするための叩き台で、
句点探索の追加など、ご使用に合う形でのコーディングは、
恐縮ですがご質問者様にお願いします。
単純なコードなので詳しい解説は省略しますが、
不明な点があればご質問ください。
<?php //文字列中からHTMLタグを検索するサンプル $separate = -1; //テスト用 左側のタグが先に来るパターン //$separate = -5; $mystring = 'abc<1def>ghi<2jkl>mno'; //テスト用 両方見つからないパターン //$mystring = 'abc1defghi2jklmno'; echo "検索対象文字列は'$mystring'\n"; $findL = '<'; $findR = '>'; //文字列の後方から探索 $posL = strrpos($mystring, $findL, $separate); $posR = strrpos($mystring, $findR, $separate); if (($posL === false) and ($posR === false)) { echo "検索文字は、対象文字列の中で見つかりませんでした。\n"; } else { if ($posL > $posR) { echo "検索文字 '$findL' を対象文字列から発見。\n"; echo "位置は $posL 文字目"; } if ($posR > $posL) { echo "検索文字 '$findR' を対象文字列から発見。\n"; echo "位置は $posR 文字目"; } } ?>