WirdPressPCLを使ってみる - c#でwordpressに投稿する -

WordPressPCLは.netcore用のWordpress関連ライブラリです。


Wordpress側でJWT Authentication for WP REST APIをインストールすればすぐに使えます。

・準備 Wordpress側 

プラグインをインストール

.htaccessに追加修正
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP:Authorization} ^(.)
RewriteRule ^(.) - [E=HTTP_AUTHORIZATION:%1]
</IfModule>
SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1

wp-config.php 追加修正
define('JWT_AUTH_SECRET_KEY', 'シークレットキー');
define('JWT_AUTH_CORS_ENABLE', true);

上記2行は下記の上に書く
require_once ABSPATH . 'wp-settings.php';

・準備 .net core側 

nugetでWordpressPCL インストール

dotnet add package WordPressPCL
dotnet restore

・投稿してみる  

using System;
using WordPressPCL;
using WordPressPCL.Client;
using WordPressPCL.Interfaces;
using WordPressPCL.Models;
using WordPressPCL.Models.Exceptions;
using WordPressPCL.Utility;

namespace test
{
class Program
{
static void Main (string[] args)
{

// 接続先 wordpress REST
string siteName = "サイト/wp-json/";
string userName = "投稿者ID";
string userPass = "パスワード";

// wordpressにJWTでアクセスするためのシークレットキー
string siteToken = "シークレットキー";

//投稿文

// カテゴリ
// wordpress 投稿>カテゴリーで設定
// カテゴリ番号はカテゴリ名の上にマウスポインタおいて、tag_idを確認
// 複数設定可能
int[] catId = new int[1];
catId[0] = 1;

// タグ
// カテゴリ同様。
// 投稿>タグ
int[] tagId = new int[1];
tagId[0] = 1;

try
{
//初期化
var client = new WordPressClient (siteName);
client.AuthMethod = AuthMethod.JWT;
client.RequestJWToken (userName, userPass).Wait ();

//JWT認証
bool isWValid = client.IsValidJWToken ().Result;

if (isWValid)
{
//JWT OK
siteToken = client.GetToken ();
client.SetJWToken (siteToken);

//投稿文作成
Post wpost = new Post ();

//タイトル
wpost.Title = new Title ("テストタイトル");
//本文
wpost.Content = new Content ("テスト投稿");
// カテゴリ
wpost.Categories = catId;
// タグ
wpost.Tags = tagId;

//投稿
var post = client.Posts.Create (wpost);
post.Wait ();

// 投稿結果
var result = post.Result;

// コンテンツのID
Console.WriteLine ("投稿 ID:" + result.Id);

// 投稿先url
Console.WriteLine ("投稿 Link:" + result.Link);
}
}
catch (AggregateException ae)
{
ae.Handle ((ex) =>
{
Console.WriteLine (ex.GetType ().Name);
Console.WriteLine (" " + ex.Message);
if (ex is WPException)
{
Console.WriteLine ("WP AE Connect Error: " + ex.Message);
return true;
}
else
{
Console.WriteLine ("WP AE Connect E1 ");
return false;
}
});
}
catch (Exception e)
{
Console.WriteLine ("WP Connect Error: " + e);
}
}
}
}


のどかわーくす