<?xml version="1.0" encoding="UTF-8" ?>
	<rss version = "2.0"  xmlns:blogChannel="http://backend.userland.com/blogChannelModule">
		<channel>
			<title>ホリデープログラミング入門</title>
			<description>ホリデープログラミングとは：仕事以外でプログラミングすること。自分が作ったサービスを使ってもらう喜びをさくっと味わえる。

PHPを中心に、ホリデープログラミングを楽しむための記事を週1で書いていきます。</description>
			<link>https://blogs.yahoo.co.jp/nob_ll</link>
			<language>ja</language>
			<copyright>Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.</copyright>
		<image>
			<title>ホリデープログラミング入門</title>
			<url>https://s.yimg.jp/i/jp/blog/iym_img.gif</url>
			<description>ホリデープログラミングとは：仕事以外でプログラミングすること。自分が作ったサービスを使ってもらう喜びをさくっと味わえる。

PHPを中心に、ホリデープログラミングを楽しむための記事を週1で書いていきます。</description>
			<link>https://blogs.yahoo.co.jp/nob_ll</link>
		</image>
		<item>
			<title>まとめ</title>
			<description>&lt;a href=&quot;http://b.hatena.ne.jp/entrylist?sort=count&amp;amp;url=http://blogs.yahoo.co.jp/nob_ll/&quot; target=&quot;_blank&quot;&gt;記事のはてなブックマークによる人気順はこちら&lt;/a&gt;。
&lt;div&gt;&lt;a href=&quot;http://blogs.yahoo.co.jp/nob_ll/MYBLOG/yblog.html?m=l&quot; target=&quot;_blank&quot;&gt;こちらから全記事の一覧が見れます&lt;/a&gt;。&lt;/div&gt;</description>
			<link>https://blogs.yahoo.co.jp/nob_ll/61253522.html</link>
			<pubDate>Fri, 08 Oct 2010 01:03:26 +0900</pubDate>
			<category>ホームページ</category>
		</item>
		<item>
			<title>今回がホリデープログラミング入門の最後の更新です</title>
			<description>&lt;div class=&#039;wiki&#039;&gt;諸々の事情でお知らせするまでに間が開いてしまいましたが、当ブログの更新はこれで終了となりました。&lt;br /&gt;
「オフィシャル」の名に恥じないブログであれたか疑わしいものの、当人としては気合の入った記事もいくつか書けたと思っています。読んでくださったみなさま、どうもありがとうございます。オフィシャルブログ執筆を推薦してくださったなかにしさんと、担当してくださったさかいさんにもこの場を借りてお礼申し上げます。ありがとうございました。&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;div class=&#039;wiki&#039;&gt;週1～隔週とはいえ、更新は大変でした。途中から入門とはいえない内容が多くなってしまったのは反省しています。知人が言っていましたが、こういった内容に縛りを設けた企画物は期間をあらかじめ決めて全体の構成を決めてから書き始めた方がまとまるのかもしれません。&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;div class=&#039;wiki&#039;&gt;このブログの内容は、プログラミングを勉強してみたい、という友人が周りに何人かいたことがきっかけで決めました。経営、あるいはいわゆる営業側の人が少しでもプログラミングに興味を持ってデバッグの大変さだとか、何ができて何ができず、何にどのぐらい時間がかかるのか、体感する機会を作る一助となったのであれば大成功です。&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;div class=&#039;wiki&#039;&gt;ところで僕は今、アメリカのサンノゼという場所にいます。語学留学中です。&lt;br /&gt;
その模様も含めてこちらのブログは更新し続けているのでよろしければご覧ください。&lt;br /&gt;
&lt;a href=&quot;http://blog.zuzara.com/category/sal-at-sjsu/&quot; target=&quot;_blank&quot;&gt;http://blog.zuzara.com/category/sal-at-sjsu/&lt;/a&gt;&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;div class=&#039;wiki&#039;&gt;それではひとまずここで筆を置きたいと思います。&lt;br /&gt;
&lt;/div&gt;</description>
			<link>https://blogs.yahoo.co.jp/nob_ll/58348743.html</link>
			<pubDate>Sat, 04 Apr 2009 07:34:53 +0900</pubDate>
			<category>ホームページ</category>
		</item>
		<item>
			<title>ヒット＆ブローをつくる</title>
			<description>&lt;div class=&#039;wiki&#039;&gt;&lt;h1&gt;&lt;a name=&#039;section-1&#039;&gt;&lt;/a&gt;ヒット＆ブロー&lt;/h1&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;div class=&#039;wiki&#039;&gt;&lt;a href=&quot;http://farm4.static.flickr.com/3294/2399932549_e9f1ce36ec.jpg&quot; target=&quot;_blank&quot;&gt;&lt;a href=&quot;http://farm4.static.flickr.com/3294/2399932549_e9f1ce36ec.jpg&quot;&gt;http://farm4.static.flickr.com/3294/2399932549_e9f1ce36ec.jpg&lt;/a&gt;&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://flickr.com/photos/unloveable/2399932549/&quot; target=&quot;_blank&quot;&gt;Mastermind on Flickr - Photo Sharing!&lt;/a&gt;&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;div class=&#039;wiki&#039;&gt;ヒット＆ブローというゲームがあります。&lt;a href=&quot;http://ja.wikipedia.org/wiki/%E3%83%9E%E3%82%B9%E3%82%BF%E3%83%BC%E3%83%9E%E3%82%A4%E3%83%B3%E3%83%89&quot; target=&quot;_blank&quot;&gt;Mastermind&lt;/a&gt; とも呼ぶようです。&lt;br /&gt;
僕が小学生のとき、塾の算数の先生が教えてくれました。そのときのルールは1対1で、まず自分の4桁の数字を決めます。0～9の数字で重複は無し。先手後手を決めてお互い相手の4桁を予想し合い先に当てた方が勝ち。数字も場所も合っているときにヒット、場所は間違っているがどこかに言った数字が含まれるときにブローの数をそれぞれ申告します。&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;div class=&#039;wiki&#039;&gt;例えば自分が「1234」にして相手が「5678」を予想すると0ヒット0ブローです。「1235」を予想すると3ヒット0ブロー、「4321」なら0ヒット4ブロー。&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;div class=&#039;wiki&#039;&gt;今、ネットにつながらない環境にいるのでこのゲームを作ってみようと思います。&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;div class=&#039;wiki&#039;&gt;&lt;h2&gt;&lt;a name=&#039;section-2&#039;&gt;&lt;/a&gt;作るものの枠&lt;/h2&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;div class=&#039;wiki&#039;&gt;コンピュータの決めた4桁を人間が予想するのは面白みがないので、こちらが決めた4桁を予想するプログラムを作ります。まぁ、出来上がるものは人間が遊ぶゲームにはなりませんが。「ヒット＆ブロー」で検索すると必勝法的な解説がいろいろ出てきます。ひとまず動くこと重視ですが、なるべく少ない予想数で当てられるようにしたいところです。&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;div class=&#039;wiki&#039;&gt;言語は何でもいいですが、PHPで作ってしまいましょう。&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;div class=&#039;wiki&#039;&gt;&lt;h2&gt;&lt;a name=&#039;section-3&#039;&gt;&lt;/a&gt;ランダムで当てるプログラム&lt;/h2&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;div class=&#039;wiki&#039;&gt;というわけでまずはランダムで予想するプログラムを作ってみました。&lt;br /&gt;
ソースはこんな感じ。&lt;br /&gt;
&lt;a href=&quot;http://zuzara.com/pub/hitandblow_20081229.phps&quot; target=&quot;_blank&quot;&gt;http://zuzara.com/pub/hitandblow_20081229.phps&lt;/a&gt;&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&#039;wiki&#039;&gt;&lt;h2&gt;&lt;a name=&#039;section-4&#039;&gt;&lt;/a&gt;次回&lt;/h2&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;div class=&#039;wiki&#039;&gt;もう少し当てる回数を減らす工夫をしてみます。&lt;br /&gt;
&lt;/div&gt;</description>
			<link>https://blogs.yahoo.co.jp/nob_ll/57223290.html</link>
			<pubDate>Mon, 29 Dec 2008 13:52:29 +0900</pubDate>
			<category>その他インターネット</category>
		</item>
		<item>
			<title>PHPのフレームワーク考</title>
			<description>&lt;div class=&#039;wiki&#039;&gt;&lt;h1&gt;&lt;a name=&#039;section-1&#039;&gt;&lt;/a&gt;PHPのフレームワーク考&lt;/h1&gt;
&lt;a href=&quot;http://farm4.static.flickr.com/3027/3036850605_35ec2225d2.jpg&quot; target=&quot;_blank&quot;&gt;&lt;a href=&quot;http://farm4.static.flickr.com/3027/3036850605_35ec2225d2.jpg&quot;&gt;http://farm4.static.flickr.com/3027/3036850605_35ec2225d2.jpg&lt;/a&gt;&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://flickr.com/photos/astrid/3036850605/&quot; target=&quot;_blank&quot;&gt;Concrete on Flickr - Photo Sharing!&lt;/a&gt;&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;div class=&#039;wiki&#039;&gt;PHPのフレームワークはたくさんあります。ログインを必要とするウェブアプリを作るのであればフレームワークを使った方がいいでしょう。僕はフレームワークを使うようなウェブアプリをたくさんは作っていませんが、CakePHP, symfony, Zend Frameworkはそれぞれ仕事でも使ったことがあります。&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;div class=&#039;wiki&#039;&gt;たくさんあるフレームワークの中からどれを採用するか、自前のものにするか、判断は難しいと思います。ホリデーにプログラミングする上では使わない、という選択肢もあります。&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;div class=&#039;wiki&#039;&gt;フレームワークを使うデメリットは&lt;br /&gt;
・PHPの知識以外に個別のフレームワークの知識が必要&lt;br /&gt;
・フレームワーク自体にセキュリティ上の問題がある可能性がある&lt;br /&gt;
・プログラミングがルーチン化する&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;div class=&#039;wiki&#039;&gt;フレームワークの知識を得るまではそれなりに時間がかかります。チームで開発するときは大きな問題です。1つ知っていれば2つ目以降の習得が楽になるのはプログラミング言語と同じですが、それぞれに癖があり好き嫌いも出るでしょう。CakePHPが嫌いな人は何人か見かけました。&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;div class=&#039;wiki&#039;&gt;ちょっと脱線しますがこの嫌い、という反応は往々にして最も普及しているものに発生するようです。WindowsしかりPHPしかり。PHPもCakePHPも初心者向け、というイメージが強いです。設計思想的に美しくないものが普及するのか普及すると醜くなるのか、初心者向けに設計すると醜くならざるをえないのか、何か法則がありそうな気がしています。&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;div class=&#039;wiki&#039;&gt;話を戻して、セキュリティ上の問題は、普及していて実績の多いフレームワークの方がリスクが少ないでしょう。マイナーであれば表面化しない可能性もありますが、潜在的なリスクがあるのはよろしくありません。&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;div class=&#039;wiki&#039;&gt;プログラミングがルーチン化する、というのはフレームワークを使う最大のメリットでもあります。開発効率を上げるのがフレームワークを使う主な目的だからです。効率化の果てには単調作業のつまらなさしか残らないのでこれはこれでプログラマーとしては問題です。&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;div class=&#039;wiki&#039;&gt;僕はPHP5を使う前提で、Zend Frameworkが今一番手になじんでいます。理由はかなり個人的な感覚ですが、&lt;br /&gt;
・フレームワークに支配されたコーディングにならない&lt;br /&gt;
・コーディング規約に則って書かれたコードが見やすい&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;div class=&#039;wiki&#039;&gt;前者はフレームワークに任せたいところだけ任せられる、といったところでしょうか。モジュール化されたZFはウェブアプリ以外にも使えますし、命名規則やModelをフレームワークの流儀に強制されることはなく、設定ファイルもありません。&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;div class=&#039;wiki&#039;&gt;後者は、PEARのコーディング規約に近いZendのそれに自分が慣れているのが大きいです。&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;div class=&#039;wiki&#039;&gt;どのフレームワークを使うにせよバージョンアップには気をとめておく必要がありますし、世の中の流行り廃りもあるので他のフレームワークにも目を配っておかねば、といったところです。今回はいくつか新しいフレームワークを見ている中で書きました。&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;div class=&#039;wiki&#039;&gt;&lt;a href=&quot;http://codeigniter.com/&quot; target=&quot;_blank&quot;&gt;CodeIgniter&lt;/a&gt;とその派生でPHP5専用の&lt;a href=&quot;http://www.kohanaphp.com/home&quot; target=&quot;_blank&quot;&gt;Kohana&lt;/a&gt;が気になりました。CodeIgniterは日本語の情報もかなり充実してきているようです。&lt;br /&gt;
&lt;/div&gt;</description>
			<link>https://blogs.yahoo.co.jp/nob_ll/57064948.html</link>
			<pubDate>Mon, 15 Dec 2008 19:13:39 +0900</pubDate>
			<category>その他インターネット</category>
		</item>
		<item>
			<title>【6】スパムコメントに汚染されたYahoo!ブログを救う</title>
			<description>&lt;div class=&#039;wiki&#039;&gt;&lt;a href=&quot;http://farm1.static.flickr.com/63/222507448_cdbbb53a79.jpg&quot; target=&quot;_blank&quot;&gt;&lt;a href=&quot;http://farm1.static.flickr.com/63/222507448_cdbbb53a79.jpg&quot;&gt;http://farm1.static.flickr.com/63/222507448_cdbbb53a79.jpg&lt;/a&gt;&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://flickr.com/photos/cdm/222507448/&quot; target=&quot;_blank&quot;&gt;sweet release on Flickr - Photo Sharing!&lt;/a&gt;&lt;br /&gt;
&lt;h1&gt;&lt;a name=&#039;section-1&#039;&gt;&lt;/a&gt;【6】スパムコメントに汚染されたYahoo!ブログを救う&lt;/h1&gt;
zuzara.org を&lt;a href=&quot;http://blogs.yahoo.co.jp/nob_ll/56630062.html&quot; target=&quot;_blank&quot;&gt;別サーバ&lt;/a&gt;に移行したのはよかったものの、phpのオプションでsslへのアクセスが許可されていなかったのでデモは動かなくなってしまいました。&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;div class=&#039;wiki&#039;&gt;というわけでソースのみの公開です。&lt;br /&gt;
&lt;a href=&quot;http://www.zuzara.com/pub/yahoo_blog_comments/index.phps&quot; target=&quot;_blank&quot;&gt;http://www.zuzara.com/pub/yahoo_blog_comments/index.phps&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://www.zuzara.com/pub/yahoo_blog_comments/delete.phps&quot; target=&quot;_blank&quot;&gt;http://www.zuzara.com/pub/yahoo_blog_comments/delete.phps&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://www.zuzara.com/pub/yahoo_blog_comments/Yahoo_Blog_Comments.phps&quot; target=&quot;_blank&quot;&gt;http://www.zuzara.com/pub/yahoo_blog_comments/Yahoo_Blog_Comments.phps&lt;/a&gt;&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;div class=&#039;wiki&#039;&gt;まとめたzipはこちら。&lt;br /&gt;
&lt;a href=&quot;http://www.zuzara.com/pub/yahoo_blog_comments.zip&quot; target=&quot;_blank&quot;&gt;http://www.zuzara.com/pub/yahoo_blog_comments.zip&lt;/a&gt;&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;div class=&#039;wiki&#039;&gt;動作にはSSLが有効になったPHP5と、ライブラリとして&lt;a href=&quot;http://framework.zend.com/download/latest&quot; target=&quot;_blank&quot;&gt;ZendFramework&lt;/a&gt;が必要です。Zend_Clientを使ってひたすらブラウザの動作の真似をしているだけのコードです。&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;div class=&#039;wiki&#039;&gt;Yahoo!ブログの仕様（HTMLの構造やPOSTする内容）に左右されるのでいつまで動作するかわかりません。自分以外のIDで試してもいないので動作は未保証ですが、スパムコメントに悩まされている方がいらっしゃれば、お試しください。&lt;br /&gt;
&lt;/div&gt;</description>
			<link>https://blogs.yahoo.co.jp/nob_ll/56714591.html</link>
			<pubDate>Mon, 17 Nov 2008 16:03:14 +0900</pubDate>
			<category>その他インターネット</category>
		</item>
		<item>
			<title>PHP5の動く無料ホスティング</title>
			<description>&lt;div class=&#039;wiki&#039;&gt;&lt;a href=&quot;http://farm2.static.flickr.com/1396/1180723077_f7a099e452.jpg&quot; target=&quot;_blank&quot;&gt;&lt;a href=&quot;http://farm2.static.flickr.com/1396/1180723077_f7a099e452.jpg&quot;&gt;http://farm2.static.flickr.com/1396/1180723077_f7a099e452.jpg&lt;/a&gt;&lt;/a&gt;&lt;br /&gt;
&lt;h1&gt;&lt;a name=&#039;section-1&#039;&gt;&lt;/a&gt;PHP5の動く無料ホスティング&lt;/h1&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;div class=&#039;wiki&#039;&gt;zuzara.org のサーバを停止してから無料のホスティングサーバを探していました。サービスを提供する場合は月数百円でも払って安心できる企業が提供しているサーバを使うべきでしょう。今回はソースコードを置いたりサンプルアプリを動かす程度なので無料のものにしてみました。&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;div class=&#039;wiki&#039;&gt;で、こちらがよさげ。&lt;br /&gt;
表示は英語ですが特に難しいことはないです。&lt;br /&gt;
&lt;a href=&quot;http://www.000webhost.com/order.php&quot; target=&quot;_blank&quot;&gt;Free Web Hosting with PHP, MySQL and cPanel&lt;/a&gt;&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;div class=&#039;wiki&#039;&gt;PHP5.2.6が使え、その他の機能も申し分ないです。.htaccessも使えます。&lt;br /&gt;
ちょっと変わったところとして、デフォルトではPHPのエラーメッセージを出すと http://www.000webhost.com/ へのリンクが出ます。あと &lt;a href=&quot;http://www.hardened-php.net/suhosin/&quot; target=&quot;_blank&quot;&gt;suhosin&lt;/a&gt; も入っています。&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;div class=&#039;wiki&#039;&gt;FTPの接続は若干不安定な感じがします。&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;div class=&#039;wiki&#039;&gt;しかし本当に無料なのか、疑ってしまいました。FAQになぜ無料なの？という質問が載っていますが、、どうでしょう。&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;div class=&#039;wiki&#039;&gt;サーバが変わると、ファイルへのパスであったり様々な環境の違いがあるので動作確認をいちいちしていかないとなりません。&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;div class=&#039;wiki&#039;&gt;そういった変化に対応しやすいコーディングをしておく、というのも腕の見せ所ではあります。&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;div class=&#039;wiki&#039;&gt;例えばパスはすべて変数にしてハードコーディングしない、とか。基本ですが&lt;br /&gt;
&lt;div class=&#039;quote&#039;&gt;$fp = fopen(&amp;#39;../../logs/hoge.txt&amp;#39;, &amp;#39;r&amp;#39;);&lt;br /&gt;
$buf = file_get_contents(&amp;#39;/home/funaki/logs/fuga.txt&amp;#39;);&lt;br /&gt;
&lt;/div&gt;

と相対パスや絶対パスを不必要に混ぜて使っていたりするとパスが変わったとき面倒なことになりします。&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;div class=&#039;wiki&#039;&gt;&lt;div class=&#039;quote&#039;&gt;define(&amp;#39;LOG_DIR&amp;#39;, &amp;#39;/home/funaki/logs&amp;#39;);&lt;br /&gt;
define(&amp;#39;LOG_HOGE_TXT, LOG_DIR . &amp;#39;/hoge.txt&amp;#39;);&lt;br /&gt;
define(&amp;#39;LOG_FUGA_TXT, LOG_DIR . &amp;#39;/fuga.txt&amp;#39;);&lt;br /&gt;
&lt;/div&gt;

といった具合にソースの先頭にまとめておけば修正もしやすいものです。&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;div class=&#039;wiki&#039;&gt;さて地道に移行を進めていきたいと思います。&lt;br /&gt;
&lt;/div&gt;</description>
			<link>https://blogs.yahoo.co.jp/nob_ll/56630062.html</link>
			<pubDate>Mon, 10 Nov 2008 23:31:37 +0900</pubDate>
			<category>UNIX</category>
		</item>
		<item>
			<title>雑談</title>
			<description>&lt;div class=&#039;wiki&#039;&gt;まただいぶ間が開いてしまいました。。&lt;br /&gt;
しかも作業しようとした日に限ってロリポップにログインできず。&lt;br /&gt;
ロリポップは今PHPのバージョンを5に上げる作業をしてくれていて待っているところでもあります。&lt;br /&gt;
&lt;a href=&quot;http://lolipop.jp/?mode=mainte0810&quot; target=&quot;_blank&quot;&gt;ロリポップ！レンタルサーバー - 全サーバーメンテナンスのお知らせ&lt;/a&gt;&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;div class=&#039;wiki&#039;&gt;スパムコメントを削除するツールを動かしていたzuzara.orgのサーバを閉じてしまったのでPHP5の動くサーバに移転しなければならないのですが。&lt;a href=&quot;http://www.xrea.com/&quot; target=&quot;_blank&quot;&gt;XREA.com&lt;/a&gt;は今無料ユーザの募集をしていませんしちょっと困り気味。&lt;br /&gt;
&lt;/div&gt;</description>
			<link>https://blogs.yahoo.co.jp/nob_ll/56514540.html</link>
			<pubDate>Sun, 02 Nov 2008 14:56:58 +0900</pubDate>
			<category>ホームページ</category>
		</item>
		<item>
			<title>【5】スパムコメントに汚染されたYahoo!ブログを救う</title>
			<description>&lt;div class=&#039;wiki&#039;&gt;ようやく一通り動くようになりました！&lt;br /&gt;
追記：デモを動かせる場所がなくなってしまったので&lt;a href=&quot;http://blogs.yahoo.co.jp/nob_ll/56714591.html&quot; target=&quot;_blank&quot;&gt;ソースのみ公開中&lt;/a&gt;です。&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;div class=&#039;wiki&#039;&gt;ただし、このツールを使うには自分のYaho!IDのパスワードを入力する必要があります。パスワードを保存するようなことはしていませんが、Yahoo!公式のツールではないので何か問題が起きても無保証です。&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;div class=&#039;wiki&#039;&gt;エラー処理がまだ甘いのですが、、来週デザインももう少し変えて公開できそうです。&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;div class=&#039;wiki&#039;&gt;100個以上スパムコメントがついていた記事も時間はかかりますがばっちり削除できました。&lt;br /&gt;
自画自賛ですがなかなか便利です。&lt;br /&gt;
&lt;/div&gt;</description>
			<link>https://blogs.yahoo.co.jp/nob_ll/56256611.html</link>
			<pubDate>Sun, 12 Oct 2008 15:52:06 +0900</pubDate>
			<category>その他インターネット</category>
		</item>
		<item>
			<title>【4】スパムコメントに汚染されたYahoo!ブログを救う</title>
			<description>&lt;div class=&#039;wiki&#039;&gt;&lt;h1&gt;&lt;a name=&#039;section-1&#039;&gt;&lt;/a&gt;【4】スパムコメントに汚染されたYahoo!ブログを救う&lt;/h1&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;div class=&#039;wiki&#039;&gt;&lt;a href=&quot;http://blogs.yahoo.co.jp/nob_ll/56122424.html&quot; target=&quot;_blank&quot;&gt;前回&lt;/a&gt;Yahoo!ブログへのログイン処理をプログラムで自動化しました。プログラムを書いているとき、さすがに1回でうまくいったわけではなく何度も失敗してやり直しました。どうやらそれが原因で、今日普通にブラウザでログインしようとしたら「不正なアクセスがあった可能性があるのでパスワードを変更してください」というメッセージが出ました。さすがYahoo!、しっかりしています。&amp;#8232;&lt;br /&gt;
さて、今回は試しに1つスパムコメントを削除してみます。&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;div class=&#039;wiki&#039;&gt;&lt;div class=&#039;quote&#039;&gt;ini_set(&amp;#39;include_path&amp;#39;, &amp;#39;/usr/local/src/ZendFramework-1.6.0-minimal/library&amp;#39;);&lt;br /&gt;
require_once &amp;#39;Zend/Http/Client.php&amp;#39;;&lt;br /&gt;
&lt;br /&gt;
$url      = $argv[1]; // an article url&lt;br /&gt;
$username = $argv[2];&lt;br /&gt;
$password = $argv[3];&lt;br /&gt;
&lt;br /&gt;
$comments = array();&lt;br /&gt;
&lt;br /&gt;
try {&lt;br /&gt;
$client = new Zend_Http_Client;&lt;br /&gt;
$client-&amp;gt;setConfig(array(&lt;br /&gt;
    &amp;#39;keepalive&amp;#39; =&amp;gt; true,&lt;br /&gt;
    &amp;#39;useragent&amp;#39; =&amp;gt; &amp;#39;Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.0.3) Gecko/2008092414 Firefox/3.0.3&amp;#39;,&lt;br /&gt;
    &amp;#39;timeout&amp;#39;   =&amp;gt; 120,&lt;br /&gt;
));&lt;br /&gt;
&lt;br /&gt;
//  === login === &lt;br /&gt;
&lt;br /&gt;
$client-&amp;gt;setCookieJar();&lt;br /&gt;
&lt;br /&gt;
//  preset&lt;br /&gt;
$client-&amp;gt;setUri(&amp;#39;&lt;a href=&quot;https://login.yahoo.co.jp/config/login?.src=blog&amp;amp&quot; target=&quot;_blank&quot;&gt;https://login.yahoo.co.jp/config/login?.src=blog&amp;amp&lt;/a&gt;;.done=http%3A//blogs.yahoo.co.jp/&amp;#39;);&lt;br /&gt;
$response = $client-&amp;gt;request();&lt;br /&gt;
$result = mb_convert_encoding($response-&amp;gt;getBody(), &amp;#39;UTF-8&amp;#39;, &amp;#39;EUC-JP&amp;#39;);&lt;br /&gt;
&lt;br /&gt;
if (!preg_match(&amp;#39;@&amp;lt;form method=&amp;quot;post&amp;quot; action=&amp;quot;&lt;a href=&quot;https://login&amp;#92&quot; target=&quot;_blank&quot;&gt;https://login&amp;#92&lt;/a&gt;;.yahoo&amp;#92;.co&amp;#92;.jp/config/login[^&amp;gt;]*&amp;gt;(.*)&amp;lt;/form&amp;gt;@s&amp;#39;, $result, $match)) {&lt;br /&gt;
    die(&amp;quot;cannot get login parameters.&amp;#92;n&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
$c = preg_match_all(&amp;#39;@&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;([^&amp;quot;]*)&amp;quot; value=&amp;quot;([^&amp;quot;]*)&amp;quot;[^&amp;gt;]*?&amp;gt;@&amp;#39;, $match[1], $match);&lt;br /&gt;
$params = array();&lt;br /&gt;
for ($i = 0; $i &amp;lt; $c; $i++) {&lt;br /&gt;
    $params[$match[1][$i]] = $match[2][$i];&lt;br /&gt;
}&lt;br /&gt;
$params[&amp;#39;.persistent&amp;#39;] = &amp;#39;y&amp;#39;;&lt;br /&gt;
$params[&amp;#39;login&amp;#39;] = $username;&lt;br /&gt;
$params[&amp;#39;passwd&amp;#39;] = $password;&lt;br /&gt;
&lt;br /&gt;
//  login&lt;br /&gt;
$client-&amp;gt;setUri(&amp;#39;&lt;a href=&quot;https://login.yahoo.co.jp/config/login?&quot; target=&quot;_blank&quot;&gt;https://login.yahoo.co.jp/config/login?&lt;/a&gt;&amp;#39;);&lt;br /&gt;
$client-&amp;gt;setParameterPost($params);&lt;br /&gt;
$client-&amp;gt;request(&amp;#39;POST&amp;#39;);&lt;br /&gt;
&lt;br /&gt;
$client-&amp;gt;resetParameters();&lt;br /&gt;
&lt;br /&gt;
$cookieJar = $client-&amp;gt;getCookieJar();&lt;br /&gt;
$strCookie = &amp;amp;&amp;amp;;&lt;br /&gt;
foreach ($cookieJar-&amp;gt;getAllCookies() as $cookie) {&lt;br /&gt;
    $strCookie .= $cookie-&amp;gt;getName() . &amp;quot;=&amp;quot; . $cookie-&amp;gt;getValue() . &amp;quot;;&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
$client-&amp;gt;setCookieJar(false);&lt;br /&gt;
$client-&amp;gt;setCookie($strCookie);&lt;br /&gt;
&lt;br /&gt;
fwrite(STDERR, &amp;quot;login complete.&amp;#92;n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
$client-&amp;gt;setUri($url);&lt;br /&gt;
$response = $client-&amp;gt;request(&amp;#39;GET&amp;#39;);&lt;br /&gt;
$result = mb_convert_encoding($response-&amp;gt;getBody(), &amp;#39;UTF-8&amp;#39;, &amp;#39;EUC-JP&amp;#39;);&lt;br /&gt;
echo &amp;quot;last: &amp;quot;, $client-&amp;gt;getLastRequest(), &amp;quot;&amp;#92;n&amp;quot;;&lt;br /&gt;
$c = preg_match_all(&amp;#39;@&amp;lt;p class=&amp;quot;comentBody&amp;quot;&amp;gt;(.*?)&amp;lt;a href=&amp;quot;javascript:void&amp;#92;(0&amp;#92;)&amp;quot; onClick=&amp;quot;javascript:del_cmt3&amp;#92;((&amp;#92;d+),(&amp;#92;d+),(&amp;#92;d+),@s&amp;#39;, $result, $match);&lt;br /&gt;
for ($i = 0; $i &amp;lt; $c; $i++) {&lt;br /&gt;
    $comments[] = array(&amp;#39;body&amp;#39; =&amp;gt; $match[1][$i], &amp;#39;pid&amp;#39; =&amp;gt; $match[2][$i], &amp;#39;id&amp;#39; =&amp;gt; $match[3][$i], &amp;#39;fid&amp;#39; =&amp;gt; $match[4][$i]);&lt;br /&gt;
}&lt;br /&gt;
//echo &amp;quot;result: $result&amp;#92;n&amp;quot;;&lt;br /&gt;
if (!preg_match(&amp;#39;@var jscrumb&amp;#92;s*= &amp;#92;&amp;#39;(.*?)&amp;#92;&amp;#39;;@&amp;#39;, $result, $match)) {&lt;br /&gt;
    throw new Exception(&amp;quot;crumb does not find.&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
$crumb = $match[1];&lt;br /&gt;
fwrite(STDERR, &amp;quot;crumb: $crumb&amp;#92;n&amp;quot;);&lt;br /&gt;
print_r($comments[0]);&lt;br /&gt;
&lt;br /&gt;
//  delete a comment&lt;br /&gt;
$client-&amp;gt;resetParameters();&lt;br /&gt;
$client-&amp;gt;setUri(&amp;quot;&lt;a href=&quot;http://post.blogs.yahoo.co.jp/{$username&quot; target=&quot;_blank&quot;&gt;http://post.blogs.yahoo.co.jp/{$username&lt;/a&gt;}/MYBLOG/delete.html&amp;quot;);&lt;br /&gt;
$client-&amp;gt;setConfig(array(&amp;#39;maxredirects&amp;#39; =&amp;gt; 0));&lt;br /&gt;
$client-&amp;gt;setParameterGet(array(&lt;br /&gt;
    &amp;#39;sopt&amp;#39;      =&amp;gt; &amp;#39;cmt&amp;#39;,&lt;br /&gt;
    &amp;#39;fid&amp;#39;       =&amp;gt; $comments[0][&amp;#39;fid&amp;#39;],&lt;br /&gt;
    &amp;#39;id&amp;#39;        =&amp;gt; $comments[0][&amp;#39;id&amp;#39;],&lt;br /&gt;
    &amp;#39;pid&amp;#39;       =&amp;gt; $comments[0][&amp;#39;pid&amp;#39;],&lt;br /&gt;
    &amp;#39;p&amp;#39;         =&amp;gt; &amp;amp;&amp;amp;,&lt;br /&gt;
    &amp;#39;update&amp;#39;    =&amp;gt; 1,&lt;br /&gt;
    &amp;#39;m&amp;#39;         =&amp;gt; &amp;amp;&amp;amp;,&lt;br /&gt;
    &amp;#39;crumb&amp;#39;     =&amp;gt; $crumb,&lt;br /&gt;
    &amp;#39;s&amp;#39;         =&amp;gt; &amp;#39;art_cmt&amp;#39;,&lt;br /&gt;
    &amp;#39;.done&amp;#39;     =&amp;gt; $url,&lt;br /&gt;
));&lt;br /&gt;
$client-&amp;gt;setHeaders(&amp;#39;Referer&amp;#39;, $url);&lt;br /&gt;
$response = $client-&amp;gt;request(&amp;#39;GET&amp;#39;);&lt;br /&gt;
echo &amp;quot;last: &amp;quot;, $client-&amp;gt;getLastRequest(), &amp;quot;&amp;#92;n&amp;quot;;&lt;br /&gt;
//echo &amp;quot;body: &amp;quot;, mb_convert_encoding($response-&amp;gt;getBody(), &amp;#39;UTF-8&amp;#39;, &amp;#39;EUC-JP&amp;#39;), &amp;quot;&amp;#92;n&amp;quot;;&lt;br /&gt;
//var_dump($response-&amp;gt;getHeaders());&lt;br /&gt;
if ($response-&amp;gt;getHeader(&amp;#39;Location&amp;#39;) != &amp;#39;&amp;#39;) {&lt;br /&gt;
    echo &amp;quot;OK!&amp;#92;n&amp;quot;;&lt;br /&gt;
} else {&lt;br /&gt;
    throw new Exception(&amp;quot;cannot delete a comment.&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
} catch (Exception $e) {&lt;br /&gt;
    fwrite(STDERR, $e-&amp;gt;getMessage() . &amp;quot;&amp;#92;n&amp;quot;);&lt;br /&gt;
    fwrite(STDERR, $e-&amp;gt;getTraceAsString() . &amp;quot;&amp;#92;n&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;/div&gt;

&lt;/div&gt;&lt;br /&gt;
&lt;div class=&#039;wiki&#039;&gt;引数にコメントのある記事URLとログイン名、パスワードを渡して実行します。&lt;br /&gt;
今までのソースに若干バグもありました。&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;div class=&#039;wiki&#039;&gt;あとこの部分は下手にキャッシュを取ると動かなくなります。そのせいでコメント削除に失敗してずいぶん時間を食ってしまった。。&lt;br /&gt;
JavaScriptも多少は見て、削除時の通信を忠実に再現しているだけです。&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;div class=&#039;wiki&#039;&gt;ソース全体の解説は出来上がってからにするとしましょう。&lt;br /&gt;
これでコメントの削除もできるようになったので、インターフェイスを整えていきます。今まではデバッグのしやすさからコマンドライン上で作業しましたが、次からはウェブのformを使っていきます。&lt;br /&gt;
&lt;/div&gt;</description>
			<link>https://blogs.yahoo.co.jp/nob_ll/56189301.html</link>
			<pubDate>Mon, 06 Oct 2008 23:44:35 +0900</pubDate>
			<category>その他インターネット</category>
		</item>
		<item>
			<title>【3】スパムコメントに汚染されたYahoo!ブログを救う</title>
			<description>&lt;div class=&#039;wiki&#039;&gt;&lt;a href=&quot;http://farm4.static.flickr.com/3280/2638831430_afc0b9108f.jpg&quot; target=&quot;_blank&quot;&gt;&lt;a href=&quot;http://farm4.static.flickr.com/3280/2638831430_afc0b9108f.jpg&quot;&gt;http://farm4.static.flickr.com/3280/2638831430_afc0b9108f.jpg&lt;/a&gt;&lt;/a&gt;&lt;br /&gt;
&lt;h1&gt;&lt;a name=&#039;section-1&#039;&gt;&lt;/a&gt;【3】スパムコメントに汚染されたYahoo!ブログを救う&lt;/h1&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;div class=&#039;wiki&#039;&gt;今回の山場であるログイン処理に入ります。&lt;br /&gt;
世の中にはログインする必要のあるウェブサービスがたくさんありますが、Yahoo!ブログもそのひとつです。そして現状のブラウザを用いたログインにはCookieが欠かせません。ログイン処理は大まかに&lt;br /&gt;
・ログインするフォームの表示&lt;br /&gt;
・ユーザ名とパスワードを送信&lt;br /&gt;
・ログイン後のページへ&lt;br /&gt;
となります。&lt;br /&gt;
ユーザ名とパスワードを送信した後、パスワードをいちいち入力することなくログイン後のページを何ページもアクセスできるのは、裏でパスワードの代わりとなるCookieを送信しているからです。ブラウザは勝手にやってくれますが、今回のような自作プログラムでログインする際には自分でCookieの制御をする必要あり、です。&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;div class=&#039;wiki&#039;&gt;HTTPのやり取りには&lt;a href=&quot;http://blogs.yahoo.co.jp/nob_ll/56000047.html&quot; target=&quot;_blank&quot;&gt;前回&lt;/a&gt;に引き続きZend FrameworkのZend_HTTP_Clientを使います。&lt;br /&gt;
出来上がったプログラムは以下のようになりました。コマンドラインから引数にユーザ名とパスワードを与えて実行してみてください。&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;div class=&#039;wiki&#039;&gt;&lt;div class=&#039;quote&#039;&gt;&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
ini_set(&amp;#39;include_path&amp;#39;, &amp;#39;/usr/local/src/ZendFramework-1.6.0-minimal/library&amp;#39;);&lt;br /&gt;
require_once &amp;#39;Zend/Http/Client.php&amp;#39;;&lt;br /&gt;
&lt;br /&gt;
$client = new Zend_Http_Client;&lt;br /&gt;
$client-&amp;gt;setConfig(array(&lt;br /&gt;
    &amp;#39;keepalive&amp;#39; =&amp;gt; true,&lt;br /&gt;
    &amp;#39;useragent&amp;#39; =&amp;gt; &amp;#39;Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.0.3) Gecko/2008092414 Firefox/3.0.3&amp;#39;,&lt;br /&gt;
));&lt;br /&gt;
$client-&amp;gt;setCookieJar();&lt;br /&gt;
&lt;br /&gt;
//  preset&lt;br /&gt;
$client-&amp;gt;setUri(&amp;#39;&lt;a href=&quot;https://login.yahoo.co.jp/config/login?.src=blog&amp;amp&quot; target=&quot;_blank&quot;&gt;https://login.yahoo.co.jp/config/login?.src=blog&amp;amp&lt;/a&gt;;.done=http%3A//blogs.yahoo.co.jp/&amp;#39;);&lt;br /&gt;
$response = $client-&amp;gt;request();&lt;br /&gt;
$result = mb_convert_encoding($response-&amp;gt;getBody(), &amp;#39;UTF-8&amp;#39;, &amp;#39;EUC-JP&amp;#39;);&lt;br /&gt;
&lt;br /&gt;
if (!preg_match(&amp;#39;@&amp;lt;form method=&amp;quot;post&amp;quot; action=&amp;quot;&lt;a href=&quot;https://login&amp;#92&quot; target=&quot;_blank&quot;&gt;https://login&amp;#92&lt;/a&gt;;.yahoo&amp;#92;.co&amp;#92;.jp/config/login[^&amp;gt;]*&amp;gt;(.*)&amp;lt;/form&amp;gt;@s&amp;#39;, $result, $match)) {&lt;br /&gt;
    die(&amp;quot;cannot get login parameters.&amp;#92;n&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
$c = preg_match_all(&amp;#39;@&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;([^&amp;quot;]*)&amp;quot; value=&amp;quot;([^&amp;quot;]*)&amp;quot;[^&amp;gt;]*?&amp;gt;@&amp;#39;, $match[1], $match);&lt;br /&gt;
$params = array();&lt;br /&gt;
for ($i = 0; $i &amp;lt; $c; $i++) {&lt;br /&gt;
    $params[$match[1][$i]] = $match[2][$i];&lt;br /&gt;
}&lt;br /&gt;
$params[&amp;#39;.persistent&amp;#39;] = &amp;#39;y&amp;#39;;&lt;br /&gt;
$params[&amp;#39;login&amp;#39;] = $argv[1];&lt;br /&gt;
$params[&amp;#39;passwd&amp;#39;] = $argv[2];&lt;br /&gt;
&lt;br /&gt;
//  login&lt;br /&gt;
$client-&amp;gt;setUri(&amp;#39;&lt;a href=&quot;https://login.yahoo.co.jp/config/login?&quot; target=&quot;_blank&quot;&gt;https://login.yahoo.co.jp/config/login?&lt;/a&gt;&amp;#39;);&lt;br /&gt;
$client-&amp;gt;setParameterPost($params);&lt;br /&gt;
$client-&amp;gt;request(&amp;#39;POST&amp;#39;);&lt;br /&gt;
&lt;br /&gt;
$client-&amp;gt;resetParameters(); &lt;br /&gt;
&lt;br /&gt;
$cookieJar = $client-&amp;gt;getCookieJar();&lt;br /&gt;
$strCookie = &amp;#39;&amp;#39;; &lt;br /&gt;
foreach ($cookieJar-&amp;gt;getAllCookies() as $cookie) {&lt;br /&gt;
    $strCookie .= $cookie-&amp;gt;getName() . &amp;quot;=&amp;quot; . $cookie-&amp;gt;getValue() . &amp;quot;;&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
$client-&amp;gt;setCookieJar(false);&lt;br /&gt;
$client-&amp;gt;setCookie($strCookie);&lt;br /&gt;
&lt;br /&gt;
//  logined&lt;br /&gt;
$client-&amp;gt;setUri(&amp;#39;&lt;a href=&quot;http://blogs.yahoo.co.jp/&quot; target=&quot;_blank&quot;&gt;http://blogs.yahoo.co.jp/&lt;/a&gt;&amp;#39;);&lt;br /&gt;
$response = $client-&amp;gt;request(&amp;#39;GET&amp;#39;);&lt;br /&gt;
echo $client-&amp;gt;getLastRequest(), &amp;quot;&amp;#92;n&amp;quot;;&lt;br /&gt;
$result = mb_convert_encoding($response-&amp;gt;getBody(), &amp;#39;UTF-8&amp;#39;, &amp;#39;EUC-JP&amp;#39;);&lt;br /&gt;
echo $result, &amp;quot;&amp;#92;n&amp;quot;;&lt;br /&gt;
&lt;/div&gt;

&lt;/div&gt;&lt;br /&gt;
&lt;div class=&#039;wiki&#039;&gt;と言いつつこれだけでは動きません。Cookie name cannot contain these characters と例外が発生してしまうはずです。&lt;br /&gt;
最初は面倒なCookieの制御はsetCookieJar()を最初に呼ぶだけでOKだろう、と思ったらうまくいきませんでした。&lt;br /&gt;
FirefoxのLiveHTTPheadersを使って、ブラウザでログインする際のHTTP通信を見るときのCookieと、プログラムで$client-&amp;gt;getLastRequest();で表示されるCookieの内容が異なっていました。よく見るとプログラムの方では=が余計にurlencodeされています。&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;div class=&#039;wiki&#039;&gt;というわけでsetCookieを使うことに。&lt;br /&gt;
しかし上記の例外が出てしまいます。どうもYahoo!ブログのCookieの仕様の方がちょっとおかしいような気がしますが、、仕方ないので Zend/Http/Client.php の620, 621行目をコメントアウトしました。ライブラリを直接変更するのは気持ち悪いですが、urlencodeした状態のCookieだとうまくいかないので仕方ありません。&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;div class=&#039;wiki&#039;&gt;ちなみにresetParameters()の呼び出しも重要です。これがないと前の引数などが引き継がれていてうまくいきません。&lt;br /&gt;
また、実行するPHPはSSLをサポートしている必要があります。( --with-openssl ) これがないとhttpsのページにアクセスできません。&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;div class=&#039;wiki&#039;&gt;さて最後のechoで出力される文字列の中に自分のYahoo!IDが含まれていれば成功です。&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;div class=&#039;wiki&#039;&gt;これでだいたいのパーツが揃いました。いよいよスパムコメント削除を実行です。&lt;br /&gt;
&lt;/div&gt;</description>
			<link>https://blogs.yahoo.co.jp/nob_ll/56122424.html</link>
			<pubDate>Wed, 01 Oct 2008 17:40:22 +0900</pubDate>
			<category>その他インターネット</category>
		</item>
		</channel>
	</rss>