1 <?xml version="1.0" encoding="UTF-8"?>
3 <!-- EN-Revision: 17409 -->
4 <sect1 id="zend.service.akismet">
5 <title>Zend_Service_Akismet</title>
7 <sect2 id="zend.service.akismet.introduction">
11 <classname>Zend_Service_Akismet</classname> は、
12 <ulink url="http://akismet.com/development/api/">Akismet <acronym>API</acronym></ulink>
13 のクライアント機能を提供します。Akismet サービスは、
14 入力データがスパムかどうかを判定するために用いられます。
15 また、あるデータを「スパムである」とか「無実である (ハム)」
16 などと登録するためのメソッドも公開しています。
17 もともとは Wordpress 向けのスパムを識別するために作られたものですが、
22 Akismet を使用するには API キーが必要です。
23 キーを取得するには <ulink url="http://wordpress.com/">WordPress.com</ulink>
24 でアカウントを作成します。blog を作成する必要はありません。
25 単にアカウントを作成するだけで API キーが使用できます。
30 フィルタリングしたいデータを指す URL を指定してリクエストする必要があります。
31 Akismet は WordPress 向けに作られたものであることから、
33 これは、コンストラクタの二番目の引数として渡さなければなりません。
34 ただ、いつでも <methodname>setBlogUrl()</methodname> で変更することができますし、
35 その他のメソッドコールの際に 'blog' キーを指定して上書きすることもできます。
39 <sect2 id="zend.service.akismet.verifykey">
40 <title>API キーの検証</title>
43 <methodname>Zend_Service_Akismet::verifyKey($key)</methodname>
44 を使用して、Akismet API キーが有効かどうかを検証します。
45 たいていの場合は特に検証する必要もないでしょうが、
47 新しく取得したキーが実際に使用可能かどうかを調べたり
51 <programlisting language="php"><![CDATA[
52 // API キー、そしてアプリケーションやリソースへの URL
54 $akismet = new Zend_Service_Akismet($apiKey,
55 'http://framework.zend.com/wiki/');
56 if ($akismet->verifyKey($apiKey) {
64 引数を指定せずにコールすると、<methodname>verifyKey()</methodname>
65 はコンストラクタで指定した API キーを使用します。
69 <methodname>verifyKey()</methodname> は、Akismet の
70 <code>verify-key</code> REST メソッドを実装したものです。
74 <sect2 id="zend.service.akismet.isspam">
75 <title>スパムのチェック</title>
78 <methodname>Zend_Service_Akismet::isSpam($data)</methodname>
79 を使用して、Akismet がそのデータをスパムとみなすかどうかを調べます。
80 引数はひとつで、ここに連想配列を指定することができます。
81 この配列には、次のキーを設定しなければなりません。
87 <code>user_ip</code> は、データを送信したユーザの
88 IP アドレスです (あなたの IP アドレスではなく、
89 あなたのサイトを使用しているユーザの IP アドレスです)。
95 <code>user_agent</code> は、データを送信したユーザの
96 UserAgent 文字列 (ブラウザおよびバージョン) です。
108 <code>blog</code> は、リソースやアプリケーションを指す
109 完全な URL です。指定しなかった場合は、
110 コンストラクタに渡した URL を使用します。
116 <code>referrer</code> は、送信時の
117 HTTP_REFERER ヘッダの内容です
118 (スペルに注意しましょう。ヘッダの名前とは異なります)。
124 <code>permalink</code> は、送信するデータの永続的な場所
131 <code>comment_type</code> は、データの形式です。
132 ここで指定する値は API で定義されており、
133 'comment'、'trackback'、'pingback' および
134 空の文字列 ('') などがあります。しかし、
141 <code>comment_author</code> は、データの送信者の名前です。
147 <code>comment_author_email</code> は、
154 <code>comment_author_url</code> は、
155 データの送信者の URL あるいはホームページです。
161 <code>comment_content</code> は、
169 そのデータがスパムであるかどうかの判断材料とさせることもできます。
170 Akismet は、$_SERVER 配列の中身をすべて送信することを推奨しています。
174 <methodname>isSpam()</methodname> メソッドは true あるいは false を返します。
175 API キーが無効な場合は例外をスローします。
178 <example id="zend.service.akismet.isspam.example-1">
179 <title>isSpam() の使用法</title>
181 <programlisting language="php"><![CDATA[
183 'user_ip' => '111.222.111.222',
184 'user_agent' => 'Mozilla/5.0 ' . (Windows; U; Windows NT ' .
185 '5.2; en-GB; rv:1.8.1) Gecko/20061010 ' .
187 'comment_type' => 'contact',
188 'comment_author' => '誰かさん',
189 'comment_author_email' => 'nospam@myhaus.net',
190 'comment_content' => "スパマーじゃないもん。信じて!"
192 if ($akismet->isSpam($data)) {
193 echo "悪いけど、たぶんあなたはスパマーでしょう。";
195 echo "私たちのサイトへようこそ!";
201 <methodname>isSpam()</methodname> は、Akismet API のメソッド
202 <code>comment-check</code> を実装したものです。
206 <sect2 id="zend.service.akismet.submitspam">
207 <title>既知のスパムの送信</title>
210 時には、スパムがフィルタを通過してしまうこともあります。
211 フィルタを通過したデータの中に、もし「これはスパムだろう」
212 というものが見つかったら、それを Akismet
213 に送信しましょう。それにより、フィルタの性能が向上します。
217 <methodname>Zend_Service_Akismet::submitSpam()</methodname> に指定する配列は、
218 <methodname>isSpam()</methodname> に渡すものと同じ形式です。
220 API キーが無効な場合は例外が発生します。
223 <example id="zend.service.akismet.submitspam.example-1">
224 <title>submitSpam() の使用法</title>
226 <programlisting language="php"><![CDATA[
228 'user_ip' => '111.222.111.222',
229 'user_agent' => 'Mozilla/5.0 (Windows; U; Windows NT 5.2;' .
230 'en-GB; rv:1.8.1) Gecko/20061010 Firefox/2.0',
231 'comment_type' => 'contact',
232 'comment_author' => '誰かさん',
233 'comment_author_email' => 'nospam@myhaus.net',
234 'comment_content' => "スパマーじゃないもん。信じて!"
236 $akismet->submitSpam($data));
241 <methodname>submitSpam()</methodname> は、Akismet API のメソッド
242 <code>submit-spam</code> を実装したものです。
246 <sect2 id="zend.service.akismet.submitham">
247 <title>無実のデータ (ハム) の送信</title>
250 時には、Akismet が間違ってスパムと判定してしまうこともあります。
251 そのため、Akismet がスパムと判断したデータのログを定期的にチェックする必要があります。
252 このような現象を発見したら、そのデータを Akismet に「ハム」
258 <methodname>Zend_Service_Akismet::submitHam()</methodname> に指定する配列は、
259 <methodname>isSpam()</methodname> や <methodname>submitSpam()</methodname>
261 <methodname>submitSpam()</methodname> と同様、値を返しません。
262 API キーが無効な場合は例外が発生します。
265 <example id="zend.service.akismet.submitham.example-1">
266 <title>submitHam() の使用法</title>
268 <programlisting language="php"><![CDATA[
270 'user_ip' => '111.222.111.222',
271 'user_agent' => 'Mozilla/5.0 (Windows; U; Windows NT 5.2;' .
272 'en-GB; rv:1.8.1) Gecko/20061010 Firefox/2.0',
273 'comment_type' => 'contact',
274 'comment_author' => '誰かさん',
275 'comment_author_email' => 'nospam@myhaus.net',
276 'comment_content' => "スパマーじゃないもん。信じて!"
278 $akismet->submitHam($data));
283 <methodname>submitHam()</methodname> は、Akismet API のメソッド
284 <code>submit-ham</code> を実装したものです。
288 <sect2 id="zend.service.akismet.accessors">
289 <title>Zend 固有のアクセス用メソッド</title>
292 Akismet API では四つのメソッドしか定義されていませんが、
293 <classname>Zend_Service_Akismet</classname> では
294 それ以外のアクセス用メソッドも用意しています。
295 これらを使用して、内部のプロパティを変更します。
301 <methodname>getBlogUrl()</methodname> および <methodname>setBlogUrl()</methodname>
302 は、リクエストで使用する blog URL を取得したり変更したりします。
308 <methodname>getApiKey()</methodname> および <methodname>setApiKey()</methodname>
309 は、リクエストで使用する API キーを取得したり変更したりします。
315 <methodname>getCharset()</methodname> および <methodname>setCharset()</methodname>
316 は、リクエストで使用する文字セットを取得したり変更したりします。
322 <methodname>getPort()</methodname> および <methodname>setPort()</methodname>
323 は、リクエストで使用する <acronym>TCP</acronym> ポートを取得したり変更したりします。
329 <methodname>getUserAgent()</methodname> および <methodname>setUserAgent()</methodname>
330 は、リクエストで使用する HTTP ユーザエージェントを
332 注意: これは、サービスに送信するデータの user_agent
333 ではありません。サービスへのリクエストを作成する際に
334 HTTP User-Agent ヘッダで指定する内容となります。
339 <code>some user agent/version | Akismet/version</code>
341 <code>Zend Framework/ZF-VERSION | Akismet/1.11</code>
342 です。<code>ZF-VERSION</code> の部分には現在の
343 Zend Framework のバージョン、つまり定数
344 <constant>Zend_Framework::VERSION</constant>