TechBox

業務で使えそうな技術を紹介します。

pythonからWordPressのカスタムフィールドから記事検索

投稿方法は過去記事を参考にしてください。
www.techbox.work

環境

  • python3

準備

pipでインストール

pip install python-wordpress-xmlrpc

ソース

from wordpress_xmlrpc import Client, WordPressPost
from wordpress_xmlrpc.methods.posts import GetPosts, NewPost
from wordpress_xmlrpc.methods.users import GetUserInfo
from wordpress_xmlrpc.methods import media

wpSiteXMLRPC = 'http://サイト名/xmlrpc.php'
loginId = '***'
password = '***'

def CheckPost(costomID):
    wp = Client(wpSiteXMLRPC, loginId, password)
    posts = wp.call(GetPosts({
            'post_type':'post',
            'number':100000            
    }))

    exitFlg = False
    for post in posts:
        for custom_field in post.custom_fields:
            if(custom_field['key'] == 'costomID'):
                if(custom_field['value'] == costomID):
                    exitFlg = True
                    break;
    return exitFlg

本当はピンポイントで1つの記事だけ取得できたらいいだけど、うまくいかなかったからとりあえずfor文でまわすことにしますた

以上です。

pythonからWordPressに投稿&画像のアップロード

環境

  • python3

準備

pipでインストール

pip install python-wordpress-xmlrpc

ソース

from wordpress_xmlrpc import Client, WordPressPost
from wordpress_xmlrpc.methods.posts import GetPosts, NewPost
from wordpress_xmlrpc.methods.users import GetUserInfo
from wordpress_xmlrpc.methods import media

wpSiteXMLRPC = 'http://サイト名/xmlrpc.php'
loginId = '***'
password = '***'


post = WordPressPost()

# タイトル
post.title = title

# 投稿内容
post.content = body
 
# タグ、カテゴリ
post.terms_names = {
'post_tag': ***,
'category': ***
}
 
# 投稿URL(スラッグ)
post.slug = ***
 

#画像のアップロード
with open(imgPath, 'rb') as f:
    binary = f.read()
data = {
    "name": imgPath.replace("tmp/",""),
    "type": 'image/jpeg',
    "overwrite": True,
    "bits": binary
}    
media_id = wp.call(media.UploadFile(data))['id']

# 画像アイキャッチの指定
post.thumbnail = media_id

#投稿時間
#※よくわからんが、タイムゾーンが違うらしい。-9時間するとちょうど今の時間になるらしい
post.date = datetime.datetime.now() - datetime.timedelta(hours=9)

#カスタムフィールド
customFields = []
customFields.append({
    'key': 'aaa',
    'value': '***'
})
customFields.append({
    'key': 'bbb',
    'value': '***'
})

post.custom_fields = customFields


# 投稿する
# 公開済にする。
post.post_status = 'publish'

# 下書き指定の場合
# post.post_status = 'draft'

wp.call(NewPost(post))

以上です。

【.NET】DataGridViewの描画が遅い時の対策

DataGridViewの描画が遅い時の対策を紹介します。

100件程度であれば気にならないかと思いますが、
大量の行列がある状態でスクロールをすると、スクロールバーを動かすとビッビッビッみたいな感じで描画がスムーズに表示してくれない(ちらつく)んですね。
その場合の対策ですが【DoubleBuffered】というのを有効にすれば良いです。

protected void Initialize()
{
      //DataGridViewの画面ちらつきをおさえるため、DoubleBufferedを有効にする
      // DataGirdViewのTypeを取得
      System.Type dgvtype = typeof(DataGridView);
      // プロパティ設定の取得
      System.Reflection.PropertyInfo dgvPropertyInfo = dgvtype.GetProperty("DoubleBuffered", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic);
      // 対象のDataGridViewにtrueをセットする
      dgvPropertyInfo.SetValue(targetDataGridview, true, null);

}

これを実行することで、パッと表示され、スムーズにスクロールすることが確認できました。

以上です。

【EXCEL】CSVを開くと文字の形式が変わってしまう問題の対処について

概要

CSVをexcelで開くと、文字の形式が変わってしまい、そのまま保存してしまうと保存前の値と異なってしまうことがあります。

参考例として、csvをメモ帳で確認してみましょう。
メモ帳を開いて、csvファイルをドラッグ&ドロップします。
f:id:hotkou:20180410150633p:plain
csvファイルは、カンマ区切りされています。

これをcsvファイルをそのままダブルクリックしてエクセルで開くと、次のようになります。
f:id:hotkou:20180410150746p:plain

ID、番号列の頭に0がついていましたが、消えてしまっていますね。
これはエクセルの標準機能で、csvを開くと自動的に0を取り除き、数字として認識されます。
※この時点ではまだ保存されていないため、実際のファイルのデータが書き換わっているわけではありませんが、上書き保存すると値が書き換わってしまいますのでご注意ください。
基本的にexcelでcsvファイルを開いて勝手に文字列を変換されてしまうのが都合が悪い場合は、ファイルからエクセルを起動させないでください。

文字列を変換せずにエクセルで開く方法を紹介します。

手順

スタートメニューより、excelを開きます。
f:id:hotkou:20180410152036p:plain


リボンメニュー【データ】>外部データ取り込みの【テキストファイル】をクリックし、対象のcsvファイルを開きます。
f:id:hotkou:20180410152125p:plain


そのまま【次へ】をクリックします。
f:id:hotkou:20180410152610p:plain

区切り文字を【カンマ】にチェックをいれて、列が区切られていることを確認し、【次へ】を選択します。
f:id:hotkou:20180410152723p:plain

サンプルのA列、B列は【0001】というようなデータをそのまま文字列として表示したいので、列のデータ形式を【文字列】に変更します。
他の列は問題なければ、そのままOKでかまいません。
f:id:hotkou:20180410153420p:plain

A1(一番左上)に貼り付けましょう。変更したい場合は任意の位置を指定します。
f:id:hotkou:20180410153203p:plain


成功すると、次のようになります。
f:id:hotkou:20180410153608p:plain

保存する場合

再度CSVで保存する場合はファイル>【名前を付けて保存】を選択します。
f:id:hotkou:20180410153925p:plain

ファイルの種類は【CSV】を選択し、保存すればOKです。
f:id:hotkou:20180410154018p:plain


以上です。

【Windows】TortoiseSVNでコマンドから実行しよう

TortoiseSVNをコマントから実行する方法を紹介します。

ダウンロード先

TortoiseSVN公式ページよりダウンロードを行います。
Downloads · TortoiseSVN

32bitか64bitを環境にあったインストーラーをダウンロードしてください。
f:id:hotkou:20180314125307p:plain

日本語化

TortoiseSVN公式ページより、Language packs>Japaneseの日本語化パックがありますので、ダウンロードしてそのまま実行すればOKです。
f:id:hotkou:20180314144331p:plain

サンプルバッチ

以下のようなbatを作成しました。
commit対象が複数あり、同じlogメッセージを入れる場合等に便利です。

■add_commit.bat

SET message="logメッセージ"

REM add
"C:\Program Files\TortoiseSVN\bin\TortoiseProc.exe" /command:add /path:"ファイルパス" /closeonend:3 

REM commit
"C:\Program Files\TortoiseSVN\bin\TortoiseProc.exe" /command:commit /path:"ファイルパス" /closeonend:3 /logmsg:%message%


以上です。