備忘録

備忘録

C++でHTTPサーバ、クライアントを作る方法

Ⅰ. はじめに

タイトルの通り「C++でHTTPサーバ、クライアントを作る方法」です。

以下のライブラリを使います。
https://github.com/yhirose/cpp-httplib

Ⅱ. HTTPサーバ

サンプルプログラム
#pragma comment(lib, "ws2_32.lib")

#include "httplib.h"
#include <iostream>

int main(void)
{
  using namespace httplib;

  Server svr;

  svr.Get("/hi", [](const Request& req, Response& res) {
    res.set_content("Hello World!", "text/plain");
  });

  svr.Get(R"(/numbers/(\d+))", [&](const Request& req, Response& res) {
    auto numbers = req.matches[1];
    res.set_content(numbers, "text/plain");
  });

  svr.listen("localhost", 1234);
  return 0;
}
実行結果

f:id:kagasu:20180721160815p:plain

Ⅲ. HTTPクライアント

サンプルプログラム
#pragma comment(lib, "ws2_32.lib")

#include "httplib.h"
#include <iostream>

using namespace std;

int main(void)
{
#ifdef CPPHTTPLIB_OPENSSL_SUPPORT
  httplib::SSLClient cli("example.com", 80);
#else
  httplib::Client cli("example.com", 80);
#endif

  auto res = cli.Get("/");
  if (res) {
    cout << res->status << endl;
    cout << res->get_header_value("Content-Type") << endl;
    cout << res->body << endl;
  }

  return 0;
}
実行結果

f:id:kagasu:20180721161010p:plain

.NET CoreでSQLite3を使う方法

Ⅰ. はじめに

タイトルの通り「.NET CoreでSQLite3を使う方法」です。

Ⅱ. やり方

1. インストール
Install-Package Microsoft.Data.Sqlite
2. サンプルプログラム
using (var db = new SqliteConnection("Filename=db.sqlite3"))
{
  db.Open();

  var command = new SqliteCommand();

  command.Connection = db;
  command.CommandText = "insert into users(name, age) values (@Name, @Age);";
  command.Parameters.AddWithValue("@Name", "tanaka");
  command.Parameters.AddWithValue("@Age, 20);
  command.ExecuteNonQuery();
}

実行結果

f:id:kagasu:20180703082855p:plain

NuGetパッケージを作成(パック)する方法(.NET Standardの場合)

Ⅰ. はじめに

タイトルの通り「NuGetパッケージを作成し、配布する方法(.NET Standardの場合)」です。

Ⅱ. やり方

1. .csproj ファイルをテキストエディタで開く
2. PropertyGroup にNuGet用の情報を追記する

プロパティ詳細情報は以下を参照して下さい
https://docs.microsoft.com/ja-jp/dotnet/core/tools/csproj#nuget-metadata-properties

<PropertyGroup>
  <Description>Google Play Store API for .NET</Description>
  <Copyright>Copyright © kagasu, 2018</Copyright>
  <AssemblyTitle>GooglePlayStoreApi</AssemblyTitle>
  <VersionPrefix>1.0.2</VersionPrefix>
  <Authors>kagasu</Authors>
  <TargetFrameworks>netstandard2.0</TargetFrameworks>
  <AssemblyName>GooglePlayStoreApi</AssemblyName>
  <PackageId>GooglePlayStoreApi</PackageId>
  <PackageTags>GooglePlay;PlayStore;Play;API</PackageTags>
  <PackageIconUrl>https://camo.githubusercontent.com/56e18dd2327c44961f9727718843d6a63ae18c19/68747470733a2f2f692e696d6775722e636f6d2f493646636769722e706e67</PackageIconUrl>
  <PackageProjectUrl>https://github.com/kagasu/GooglePlayStoreApi</PackageProjectUrl>
  <PackageLicenseUrl>https://github.com/kagasu/GooglePlayStoreApi/blob/master/LICENSE</PackageLicenseUrl>
</PropertyGroup>
3. .nupkg ファイルを作成する
dotnet pack -c Release

または、VisualStudioで「パック」をクリックする
f:id:kagasu:20180703072334p:plain

4. .nupkg ファイルが作成される

f:id:kagasu:20180703073758p:plain

PythonでSQLiteを使う方法

Ⅰ. はじめに

Python の sqlite3 は標準ライブラリです。
pipからインストールする必要はありません。

Ⅱ. サンプルプログラム

#!/usr/bin/env python3
# coding: utf-8
import sqlite3

conn = sqlite3.connect('main2.sqlite3')
c = conn.cursor()

# create table
c.execute('create table `accounts` (`id` integer, `name` text)')
# conn.commit()

# insert
data = [
  (1, 'name001'),
  (2, 'name002'),
  (3, 'name003')
]
c.executemany("insert into accounts values(?, ?)", data)
conn.commit()

# select
for row in c.execute('select * from accounts'):
  print(row)

conn.close()

実行結果

(1, 'name001')
(2, 'name002')
(3, 'name003')

PythonでRSSを取得する方法

Ⅰ. はじめに

タイトルの通り「PythonRSSを取得する方法」です。

Ⅱ. やり方

1. 必要なモジュールをインストールする
pip install feedparser
2. サンプルプログラムを書く
main.py
#!/usr/bin/env python3
# coding: utf-8
import feedparser
import json

feed = feedparser.parse('https://gigazine.net/news/rss_2.0/', response_headers={"content-type": "text/xml; charset=utf-8"})
for x in feed.entries:
  print(x.title)
  print(x.links[0].href)
#debug
#print(json.dumps(feed, ensure_ascii=False))

実行結果

月に270万円以上の収益を上げる開発スタートアップはどのような成長を遂げてきたのか?
https://gigazine.net/news/20180624-slack-bot-standuply-mmr/

過去の歴史からわかる「技術者の仕事がAIに奪われることがない」理由とは?
https://gigazine.net/news/20180624-history-of-math-teach-future-ai/

GoogleやAppleがあなたのスマホ使用時間を減らそうとしている理由とは?
https://gigazine.net/news/20180624-why-google-apple-want-your-phone-less/
(以下略)