<?xml version="1.0" encoding="UTF-8" ?><rdf:RDF 
  xmlns="http://purl.org/rss/1.0/"
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:atom="http://www.w3.org/2005/Atom"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xml:lang="ja">
  <channel rdf:about="http://w.atwiki.jp/pula/">
    <title>プレーンテキスト備忘録</title>
    <link>http://w.atwiki.jp/pula/</link>
    <atom:link href="https://w.atwiki.jp/pula/rss10.xml" rel="self" type="application/rss+xml" />
    <atom:link rel="hub" href="https://pubsubhubbub.appspot.com" />
    <description>プレーンテキスト備忘録</description>

    <dc:language>ja</dc:language>
    <dc:date>2011-08-03T13:35:45+09:00</dc:date>
    <utime>1312346145</utime>

    <items>
      <rdf:Seq>
                <rdf:li rdf:resource="https://w.atwiki.jp/pula/pages/35.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/pula/pages/36.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/pula/pages/2.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/pula/pages/34.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/pula/pages/1.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/pula/pages/33.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/pula/pages/32.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/pula/pages/31.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/pula/pages/22.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/pula/pages/30.html" />
              </rdf:Seq>
    </items>
	
		
    
  </channel>
    <item rdf:about="https://w.atwiki.jp/pula/pages/35.html">
    <title>WEBからデータ抽出</title>
    <link>https://w.atwiki.jp/pula/pages/35.html</link>
    <description>
      ***WEBからデータ抽出
**目的
指定したURL(価格.com)のサイトからHTMLデータを取得し、
商品名、最安価格、画像URLを[[正規表現]]で取得

**GUI
#ref(WebGet2.jpg)

**プロジェクト ダウンロード
#ref(WebGet.zip)

**Tips
-C#の正規表現の中で「&quot;(ダブルクォーテーション)」をマッチングさせたい場合は
\でエスケープではなく「&quot;&quot;」で「&quot;」とマッチングさせることができる。

**コード　※VCが自動で作ったコードを含まないのでコピペじゃ動かないと思うので参考程度に
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.IO;
using System.Text;
using System.Windows.Forms;
using System.Net;

private void button1_Click(object sender, EventArgs e)
{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/* Webページ取得 */
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;WebClient wc = new WebClient();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Stream st = wc.OpenRead(UrlTextBox.Text);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Encoding enc = Encoding.GetEncoding(&quot;Shift_JIS&quot;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;StreamReader sr = new StreamReader(st, enc);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;string html = sr.ReadToEnd();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sr.Close();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;st.Close();

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/* 取得したHTMLデータから商品名を取得 */
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;System.Text.RegularExpressions.MatchCollection title =
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;System.Text.RegularExpressions.Regex.Matches(
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;html, @&quot;(?&lt;=&lt;h1&gt;&lt;a href=.*&gt;&lt;span.*&gt;).*(?=&lt;/span&gt; 価格比較&lt;/a&gt;)&quot;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;foreach (System.Text.RegularExpressions.Match m in title)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;label2.Text = m.Value;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/* 最安価格を取得 */
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;System.Text.RegularExpressions.MatchCollection kakaku =
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;System.Text.RegularExpressions.Regex.Matches(
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;html, @&quot;(?&lt;=&lt;p class=&quot;&quot;fontPrice wordwrapPrice&quot;&quot;&gt;&amp;yen;).*(?=&lt;/p&gt;)&quot;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;foreach (System.Text.RegularExpressions.Match m in kakaku)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;label4.Text = &quot;\\&quot; + m.Value;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;break; // 1位のみ抽出したいので1回でbreak
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/* 商品画像を取得 */
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;System.Text.RegularExpressions.MatchCollection imgurl =
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;System.Text.RegularExpressions.Regex.Matches(
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;html, @&quot;(?&lt;=&lt;a href=&quot;&quot;http://kakaku.com/item/.*images/&quot;&quot; target=.*img src=&quot;&quot;).*?(?=&quot;&quot;.*class=&quot;&quot;photo&quot;&quot;.*)&quot;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;foreach (System.Text.RegularExpressions.Match m in imgurl)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pictureBox1.ImageLocation = m.Value;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}

}    </description>
    <dc:date>2011-08-03T13:35:45+09:00</dc:date>
    <utime>1312346145</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/pula/pages/36.html">
    <title>Google Chrome使用拡張機能</title>
    <link>https://w.atwiki.jp/pula/pages/36.html</link>
    <description>
      ***現在使用中の拡張機能
・Gestures for Chrome(TM) - バージョン: 1.12.1
マウスジェスチャ

・New Tabs Always Last - バージョン: 0.1
新規タブ追加時に常に右はじに追加

・Click&amp;Clean - バージョン: 7.6.0.0
ブラウザ終了時に自動的にWeb入力履歴や開いた履歴等の情報を消去

・ChromeMUSE - Multi-URL Shortener/Expander - バージョン: 1.2.14
1クリックでアドレスバーのURLを短縮URLに変換

・View Source With - バージョン: 1.2.5
Webページのソースを指定したエディタで開く

・Silver Bird - バージョン: 1.9.8.1
Twitter拡張機能。見たり書いたり通知したり    </description>
    <dc:date>2011-08-03T13:19:47+09:00</dc:date>
    <utime>1312345187</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/pula/pages/2.html">
    <title>メニュー</title>
    <link>https://w.atwiki.jp/pula/pages/2.html</link>
    <description>
      プログラミング
#treemenu(title=Perl,
[[ファイルを読み込んで標準出力]],
[[「&quot;」で囲まれたURLのみ抽出]],
[[可逆暗号Crypt-RC4]],
[[構造体配列]],
[[HPをファイルとして保存]]

,[[正規表現]]
,[[小技集]]
)

#treemenu(title=Visual C#,
[[正規表現で文字列の抽出]],
[[WEBからデータ抽出]]
)

#treemenu(title=HP作成,
[[携帯電話を自動判別してリダイレクト]]
)

----
Windows全般
-[[C:\WINDOWS\SYSTEM32\CONFIG\SYSTEM が壊れているため起動できません]]
-[[Vimで確認しながら置換]]
-[[無料でPDF→画像&amp;画像(複数)→PDF]]
-[[Google Chromeで新規タブで開く]]

-[[Google Chrome使用拡張機能]]

----
自由コーナー
[[投稿ネタ]]

----

個人的メモ
-[[邦楽リスト]]
-[[洋楽リスト]]

----

// リンクを張るには &quot;[&quot; 2つで文字列を括ります。
// &quot;&gt;&quot; の左側に文字、右側にURLを記述するとリンクになります

-合計:&amp;counter(total)
-今日:&amp;counter(today)
-昨日:&amp;counter(yesterday)

&amp;link_editmenu(text=ここを編集)

**更新履歴
#recent(20)    </description>
    <dc:date>2011-08-03T13:12:38+09:00</dc:date>
    <utime>1312344758</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/pula/pages/34.html">
    <title>正規表現で文字列の抽出</title>
    <link>https://w.atwiki.jp/pula/pages/34.html</link>
    <description>
      /* UrlTextBoxに郵便番号っぽい文字列が含まれているか調べる */
if (System.Text.RegularExpressions.Regex.IsMatch(
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;UrlTextBox.Text, @&quot;\d\d\d-\d\d\d\d&quot;))
{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Console.WriteLine(&quot;郵便番号が含まれています&quot;);
}

/* UrlTextBox内の郵便番号っぽい文字列をすべて抽出する */
System.Text.RegularExpressions.MatchCollection mc =
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;System.Text.RegularExpressions.Regex.Matches(
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;UrlTextBox.Text, @&quot;\d\d\d-\d\d\d\d&quot;);
foreach (System.Text.RegularExpressions.Match m in mc)
{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Console.WriteLine(m.Value);
}

/* UrlTextBox内の郵便番号っぽい文字列の&quot;-&quot;を削除して、【】で囲む */
UrlTextBox.Text = System.Text.RegularExpressions.Regex.Replace(
UrlTextBox.Text, @&quot;(\d\d\d)-(\d\d\d\d)&quot;, &quot;【$1$2】&quot;);    </description>
    <dc:date>2011-08-03T11:49:06+09:00</dc:date>
    <utime>1312339746</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/pula/pages/1.html">
    <title>トップページ</title>
    <link>https://w.atwiki.jp/pula/pages/1.html</link>
    <description>
      ***最終更新日時：&amp;last_modified(j)

**ここのサイトの紹介
-当Wikiは管理人の勉強&amp;備忘録になります。
　主に取り扱っている言語はPerl、C言語、C++言語、C#です。
　その他にシェルスクリプト、Unix/Linux関連の技術も取り扱うかもしれません。
-基本的に全てのページの編集は&amp;bold(){管理人のみ}が行えるものとします。
　この制限は需要があれば今後緩和され、知識の共有の場となる可能性があります。
　自由コーナーの&amp;bold(){「投稿ネタ」のページは誰でも編集可能}となっております。

**プログラミング環境
本サイトはWindows環境にて開発を行っている前提で記述しております。
特別な記述がある場合、LinuxやMinGW、Cygwin等を利用する場合がありますが
使用しているものは基本的に「gvim」、「コマンドプロンプト」のみです。

***環境
OS：Windows XP 32bit
Perl：Active Perl 5.12.4
エディタ：gvim、秀丸
C#：Visual C# 2010 Express


**当サイトについて何かあれば下記にお願いします
#comment_num2    </description>
    <dc:date>2011-08-03T11:42:59+09:00</dc:date>
    <utime>1312339379</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/pula/pages/33.html">
    <title>Google Chromeで新規タブで開く</title>
    <link>https://w.atwiki.jp/pula/pages/33.html</link>
    <description>
      ***アドレスバーに入力したURLを新規タブで開く
アドレスバーにURLを入力して「ALT+Enter」キーを入力

***ブックマークを新規タブで開く
ブックマークの上にカーソルを乗せている状態でCTRL+SHIFTを押しながらクリック

または

拡張機能Tabs to the frontを入れる。    </description>
    <dc:date>2011-08-03T11:41:18+09:00</dc:date>
    <utime>1312339278</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/pula/pages/32.html">
    <title>無料でPDF→画像&amp;画像(複数)→PDF</title>
    <link>https://w.atwiki.jp/pula/pages/32.html</link>
    <description>
      ・PDF-XChange Viewer(PDF→PNG/JPEG/BMP/他)
PDFと関連付けされている場合はPDF起動後に[ファイル]→[エクスポート]

・PDF Designer(JPEG/BMP→PDF)
エクスプローラ上からショートカットにファイルを直接ドラッグ＆ドロップで実行。
複数ファイルをドロップすると1つのPDFにまとめて出力してくれる。
PNG形式は読み込めないので一度BMP形式などに変換する必要がある。    </description>
    <dc:date>2011-07-24T17:54:31+09:00</dc:date>
    <utime>1311497671</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/pula/pages/31.html">
    <title>Vimで確認しながら置換</title>
    <link>https://w.atwiki.jp/pula/pages/31.html</link>
    <description>
      Windows版のgvimにて

ファイルを開いてる状態で
「:%s/置換前の文字/置換後の文字/gc」
を入力すると、置換する箇所としない箇所を選びながら置換できる。    </description>
    <dc:date>2011-07-20T12:03:44+09:00</dc:date>
    <utime>1311131024</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/pula/pages/22.html">
    <title>可逆暗号Crypt-RC4</title>
    <link>https://w.atwiki.jp/pula/pages/22.html</link>
    <description>
      ***可逆暗号Crypt::RC4
環境：Windows XP 32bit, Active [[Perl]] 5.12.4

事前準備：Active Perlをインストール後、コマンドプロンプトを開き
　　　　　「cpan」と入力後「install Crypt::RC4」(だったかな？)を入力すると自動でインストールが始まる。
　　　　　全て終わったら「q」でcpanを抜ける。

配布時は配下に「Crypt」フォルダを作成し、その中に「RC4.pm」を入れておけば動作する。
Crypt::RC4はディレクトリ構成らしい。

----
use Crypt::RC4;
my $passphrase = &#039;phrasetest&#039;; # 暗号化キー(自由な英数字)
my $plaintext  = &#039;mypassword&#039;; # 暗号化したい文字列

print &quot;暗号化前 = $plaintext\n&quot;;

# 暗号化キーを用いて暗号化する関数へ
my $encrypted = encrypt($passphrase, $plaintext);

print &quot;暗号化後 = $encrypted\n&quot;;

# 暗号化キーを用いて復号化する関数へ
my $decrypted = decrypt($passphrase, $encrypted);

print &quot;復号化　 = $decrypted\n&quot;;

sub encrypt{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;my ($passphrase, $plaintext) = @_;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;my $encrypted = RC4($passphrase, $plaintext);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$encrypted =~ s/(.)/unpack(&#039;H2&#039;, $1)/eg;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return $encrypted;
}

sub decrypt{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;my ($passphrase, $encrypted) = @_;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$encrypted =~ s/([0-9A-Fa-f]{2})/pack(&#039;H2&#039;, $1)/eg;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;my $decrypted = RC4($passphrase, $encrypted);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return $decrypted;
}

**実行結果
    暗号化前 = mypassword
    暗号化後 = 9f81c462a3ec0ed72f97
    復号化　 = mypassword

#comment_num2    </description>
    <dc:date>2011-07-19T18:26:29+09:00</dc:date>
    <utime>1311067589</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/pula/pages/30.html">
    <title>携帯電話を自動判別してリダイレクト</title>
    <link>https://w.atwiki.jp/pula/pages/30.html</link>
    <description>
      ***携帯電話を自動判別してリダイレクト
目的：http://www.test.comにアクセスしてきた携帯電話をhttp://www.test.com/m/に自動転送する

前提条件：HTML設置サーバーがapacheで運営されていること(.htaccessのmod_rewriteが使えること)

**サーバーのルートディレクトリに下記の内容の「.htaccess」ファイルを設置する
----
RewriteEngine on

RewriteCond %{HTTP_USER_AGENT} DoCoMo [NC]
RewriteRule ^$ http://www.test.com/m/ [L]

RewriteCond %{HTTP_USER_AGENT} KDDI [NC]
RewriteRule ^$ http://www.test.com/m/ [L]

RewriteCond %{HTTP_USER_AGENT} vodafone [NC]
RewriteRule ^$ http://www.test.com/m/ [L]

RewriteCond %{HTTP_USER_AGENT} J-PHONE [NC]
RewriteRule ^$ http://www.test.com/m/ [L]

RewriteCond %{HTTP_USER_AGENT} SoftBank [NC]
RewriteRule ^$ http://www.test.com/m/ [L]

RewriteCond %{HTTP_USER_AGENT} Up.Browser [NC]
RewriteRule ^$ http://www.test.com/m/ [L]

----
**mディレクトリ内に「RewriteEngine off」を記述した「.htaccess」ファイルも設置する。

RewriteCondをまとめる[OR]という記述法もあるのだが、うまく動作しなかったので全て分けて書いている。
[NC]は大文字小文字の区別無し、[L]はRewriteCondの条件設定終了を意味する。

#comment_num2    </description>
    <dc:date>2011-07-19T10:38:07+09:00</dc:date>
    <utime>1311039487</utime>
  </item>
  </rdf:RDF>
