備忘録

備忘録

C# で HtmlAgilityPack を使って HTML の要素値を XPath で取得する

Ⅰ. はじめに

タイトルの通り、「C# で HtmlAgilityPack を使って HTML の要素値を XPath で取得する」方法です。
Web スクレイピングが簡単になります。

Ⅱ. サンプル

f:id:kagasu:20170501191818p:plain
http://example.comの「タイトル」と「リンク先(href)の値」を取得するサンプルです。

1. NuGet で HtmlAgilityPack をインストールする

Install-Package HtmlAgilityPack

2. コードを書く

static void Main(string[] args)
{
  var str = new HttpClient().GetStringAsync("http://example.com/").Result;

  var html = new HtmlDocument();
  html.LoadHtml(str);

  var title = html.DocumentNode.SelectSingleNode("/html/body/div/h1");
  Console.WriteLine(title.InnerText);

  var link = html.DocumentNode.SelectSingleNode("/html/body/div/p[2]/a");
  Console.WriteLine(link.Attributes["href"].Value);
}

3. 実行結果

f:id:kagasu:20170501192039p:plain

※2017/05/24 追記
http://example.com の HTML が変わるとサンプルの意味が無くなるので、
念のため http://example.com のバックアップを残します。
https://gist.github.com/anonymous/e325a74047edab47a2cf6ccdef60af95

C#でSMTP, Mailgun, SendGridなどを利用してメールを送信する方法

Ⅰ. はじめに

メール配信サービスのAPIをラップした FluentEmail というライブラリの紹介です。
.NET Standard で作られているためクロスプラットフォームで動作します。

各サービスの API ドキュメントには HttpClient や RestClient 等を使って Web API を直接呼び出すサンプルがあります。
しかし、メールを送信する為に各サービスごとに Web API ドキュメントを読み、理解し、実装する手間がかかります。

FluentEmail はこれらの問題を解決してくれます。

2017/04/23 時点でSMTP, Mailgun, SendGrid に対応しています。

Ⅱ. FluentEmail のサンプル(SMTPの例)

1. NuGet から FluentEmail.Smtp をインストールする

f:id:kagasu:20210718020714p:plain

2. サンプルプログラム
var smtp = new SmtpSender(new SmtpClient("smtp.example.com", 465));
var email = Email.From("from@example.com", "MyName")
    .To("to@gmail.com")
    .Subject("Test subject")
    .Body("Test body");

smtp.Send(email);

Ⅲ. FluentEmail のサンプル(Mailgunの例)

1. NuGet から FluentEmail.Mailgun をインストールする

f:id:kagasu:20170423123802p:plain

2. サンプルプログラム
public async Task<bool> SendEmail()
{
  Email.DefaultSender = new MailgunSender(
      "mydomain.tld",
      "key-********************************");

  var email = Email
    .From("from@mydomain.tld")
    .To("to@gmail.com")
    .Subject("件名")
    .Body("本文");

  var response = await email.SendAsync();
  return response.Successful;
}

nginx で autoindexの文字化けを治す

Ⅰ. はじめに

nginx の autoindex を on にしただけだと以下のように文字化けします。
これを治す方法です。

Ⅱ. やり方

1. charset utf-8; を追加する
server {
  listen 80;
  root /var/www/html/hoge;
  index index.html;

  location / {
    autoindex on;
    charset utf-8;
  }
}
2. 設定をリロードする
# CentOS 7
systemctl reload nginx

# CentOS 6
service nginx reload

BCD を修正する

Ⅰ. はじめに

f:id:kagasu:20170422233942p:plain
BCD(Boot Configuration Data)(ブート構成データ)を修正する方法です。
WindowsLinuxデュアルブートした状態から Grub を消して Windows のみブートさせる場合などに必要な作業となります。

Ⅱ. やり方

1. ブート可能な Windows メディアを作成する
2. 1 で作成したメディアをブートする
4. 以下のコマンドを入力
# バックアップを取る
$ bcdedit /export c:\backup
$ attrib c:\boot\bcd -h -r -s
$ ren c:\boot\bcd bcd.old

# BCD を修正する
$ bootrec /rebuildbcd

以上です。

プロセスセキュリティまとめ

Ⅰ. はじめに

OpenProcess などで使われるアクセス権のフラグまとめです。

Ⅱ. まとめ

PROCESS_ALL_ACCESS 0x1FFFFF
PROCESS_CREATE_PROCESS 0x80
PROCESS_CREATE_THREAD 0x2
PROCESS_DUP_HANDLE 0x40
PROCESS_QUERY_INFORMATION 0x400
PROCESS_SET_QUOTA 0x100
PROCESS_SET_INFORMATION 0x200
PROCESS_TERMINATE 0x1
PROCESS_VM_OPERATION 0x8
PROCESS_VM_READ 0x10
PROCESS_VM_WRITE 0x20
SYNCHRONIZE 0x100000