Python Tech Support

PythonによるWebアプリ、機械学習など

PythonでC++のDLLを読み込む

Pythonでは、ctypesモジュールを使用してC++のDLL(Dynamic Link Library)を読み込むことができます。

以下に、PythonC++のDLLを読み込むコードの例を示します。

import ctypes

# DLLの読み込み
mydll = ctypes.CDLL("mydll.dll")

# DLL内の関数の定義
my_function = mydll.my_function
my_function.argtypes = [ctypes.c_int]
my_function.restype = ctypes.c_int

# 関数の呼び出し
result = my_function(42)
print(result)

この例では、ctypes.CDLL()を使用してmydll.dllというDLLを読み込んでいます。次に、mydllオブジェクト内の関数を定義しています。関数の引数の型や戻り値の型は、argtypes属性とrestype属性を使用して指定します。

my_functionという関数を呼び出し、結果を表示しています。このコードでは、my_functionがDLL内の関数として定義されていることを前提としていますので、DLL内の関数名や引数の型、戻り値の型に合わせて適宜修正してください。

React で Hello World

Reactのインストールと最初のプロジェクト作成をします。

Node.jsのインストール

Node.jsをインストールし、バージョンが確認できればOKです。

$ node -v
V16.15.1

今回の環境では、v16.15.1でした。

Yarnのインストール

パッケージマネージャとしてyarnを使います。 下記コマンドでインストールします。

$ npm install -g yarn

バージョン情報が出てくればOKです。

$yarn -v
1.22.5

Reactプロジェクトの作成

create-react-appを使って、プロジェクトのひな型を生成します。 今回はtest-appというプロジェクト名とします。

$ npx create-react-app test-app

以下のような表示がされれば成功です。

Success! Created test-app at <プロジェクトパス>
Inside that directory, you can run several commands:

  npm start
    Starts the development server.

  npm run build
    Bundles the app into static files for production.

  npm test
    Starts the test runner.

  npm run eject
    Removes this tool and copies build dependencies, configuration files
    and scripts into the app directory. If you do this, you can’t go back!

We suggest that you begin by typing:

  cd test-app
  npm start

Happy hacking!

プロジェクトディレクトリに移動し、yarn startでサーバーを起動します。

$ cd test-app
$ yarn start

ブラウザが起動され、下のような画面が表示されれば成功です。

WebアプリとAWSの連携: AWS JavaScript SDK

WebアプリとAWSを連携させるために、AWS JavaScript SDKの環境構築をします。

環境

  • Windows 10 OS
  • Node.js v14.15.5
  • Yarn v1.22.18

AWS SDKのインストール

コマンドプロンプトを開き、任意のフォルダ下でAWS SDKのモジュールをインストールします。

yarn add aws-sdk

同様に、uuidモジュールも追加します。

yarn add uuid

AWS認証情報の設定

AWSのCredentials情報を設定します。 Windowsの場合、C:\Users\USER_NAME.awsフォルダを作成し、.awsフォルダ下にcredentialsという拡張子なしのファイルを作成します。 credentialsファイルを任意のテキストエディタで開き、AWSのCredentials情報を次のように入力します。

[default]
aws_access_key_id = <Access key ID>
aws_secret_access_key = <Secret access key>

認証情報の確認

yarnでモジュールをインストールしたプロジェクトディレクトリで、次のようなJavaScriptコードsample.jsを作成します。

var AWS = require("aws-sdk");

AWS.config.getCredentials(function(err) {
    if (err) console.log(err.stack);
    else {
        console.log("Access Key: ", AWS.config.credentials.accessKeyId);
        
    }
});

sample.jsを作成後、コマンドプロンプトで実行すると、設定したAccess keyが表示されます。

node sample.js

S3との連携など、後日さらに追加していきたいと思います。

AWS EC2でUbuntuサーバーを立ててからSSHログインするまで

AWSのEC2でUbuntuサーバーを立てて、WindowsからSSHログインするまでをまとめます。

環境

AWS EC2でのインスタンス作成

EC2の左ペインインスタンスページから、右上のインスタンスを起動をクリックします。

インスタンスを起動ページの名前とタグで任意のサーバー名を入力します。今回はubuntu-serverとしました。

アプリケーションおよびOSイメージで、クイックスタートにあるUbuntuを選択します。

インスタンスタイプでどれかを指定します。今回は、デフォルトのt2.microのままにしています。

キーペアの右下にある新しいキーペアの作成をクリックします。

表示されたキーペアを作成で、任意のキーペア名を入力し、キーペアを作成をクリックします。これにより、(キーペア名).pemがローカルにダウンロードされるので、ダウンロードされたフォルダパスを確認します。

ネットワーク設定SSHトラフィックを許可するの選択肢の横のセレクトボックスで、自分のIPを選択します。これによって、現在のIPからしSSH接続させないようにポートの設定が自動で行われます。

設定が終わったら、インスタンスを起動をクリック。EC2インスタンスが生成・起動されます。

Windowsからの接続

今回は、Windows PowerShellを使います。

Windows PowerShellを起動し、以下のコマンドを入力します。

> ssh -i <.pemファイルへのパス> ubuntu@<インスタンスのIPアドレス>

初めて接続する際は、信頼する接続先として保存するかどうかを問われるので、yesを入力します。

ubuntuのコンソールに入れたら接続完了です。

PythonでcURL

cURLで叩くAPIPythonから実行します。

import requests
import json

url = "https://***.com/api"

r = requests.get(url=url)
data = r.json()

print(data)

ベーシック認証対応

APIにベーシック認証が必要な場合は、requestsの引数にauthを追加します。

import requests
import json

url = "https://***.com/api"
r = requests.get(url=url, auth=('username', 'password'))
data = r.json()

プロキシ経由

import requests
import json

url = "https://***.com/api"
proxy_dict = {"http": "http://***:[port]", "https": "https://***:[port]"}

r = requests.get(url=url, auth=('username', 'password'), proxies=proxy_dict)
data = r.json()

Pythonからexeを実行し、返り値を取得する方法

.exeのモジュールをPythonから実行し、その返り値をPython内で取得します。 exeの実行には、subprocessライブラリを利用しました。

import subprocess

sExe = “<.exeのパスと引数の文字列>”
ret = subprocess.run(sExe)
print(ret.returncode)

subprocess.run()は、CompletedProcessオブジェクトを返し、戻り値はCompletedProcess.returncodeで取得できます。

Zendesk API: Zenpy

いきなりの機械学習関係ない記事です。

PythonでZendeskのAPIを叩く必要があったので実装してみました。 以前はrequestsライブラリで直接叩いていましたが、Zenpyというライブラリが使いやすいのでそちらに変更。

github.com

インストール

pip install zenpy

API Credentialsの生成

Zendesk Supportの管理ページから、チャネルカテゴリのAPIへ遷移。 設定タブのアクティブなAPIトークンにあるAPIトークンを追加ボタンをクリックして、新しいAPIを追加します。

チケットに社内コメントを追加

from zenpy import Zenpy
from zenpy.lib.api_objects import Comment, Ticket

credentials = {
    'email': "<Zendeskでのログインアドレス **@**>",
    'token': "<ZendeskのAPIトークン>",
    'subdomain': "<Zendeskのサブドメイン **.zendesk.comの**の文字列>"
    }

zenpy_client = Zenpy(**credentials)

ticket = zenpy_client.tickets(id=<更新対象のZendeskチケットID>)
ticket.comment = (body="<コメント本文>", public=False)  # public=Trueで通常コメント
zenpy_client.tickets.update(ticket)

Zendeskチケットのカスタムフィールドを上書き

from zenpy import Zenpy
from zenpy.lib.api_objects import CustomField, TIcket

credentials = {
    'email': "<Zendeskでのログインアドレス **@**>",
    'token': "<ZendeskのAPIトークン>",
    'subdomain': "<Zendeskのサブドメイン **.zendesk.comの**の文字列>"
    }

zenpy_client = Zenpy(**credentials)

ticket = zenpy_client.tickets(id=<更新対象のZendeskチケットID>)

ticket.custom_fields.append(CustomField(id=<更新対象のカスタムフィールドID>, value=<更新する値>))
zenpy_client.tickets.update(ticket)