投稿の記事一覧

2020/05/04

【覚書】WordPressにC# WindowsForm から投稿

NuGet で WordPressPCL をインストール。

WordPress には、JWT Authentication for WP-API プラグインをインストール。ユーザー → 対象ユーザ → パスワードの設定。

認証

            CWPData wp = getSelectSite();
            if( wp != null )
            {
                string strUrl = wp.siteUrl;
                try
                {
                    var client = new WordPressClient(strUrl + "wp-json");
                    client.AuthMethod = AuthMethod.JWT;
                    client.RequestJWToken(txtUserName.Text, txtPasswd.Text).Wait();
                    //
                    var isValidToken = client.IsValidJWToken().Result;
                    //
                    if (isValidToken == true)
                    {
                        wp.siteToken = client.GetToken();
                        lblAuth.Visible = true;
                        //
                        int iPos = cbWPData.SelectedIndex;
                        _mWPData[iPos].siteToken = wp.siteToken;
                    }
                    else
                    {
                        lblAuth.Visible = false;
                    }
                }
                catch (AggregateException ae)
                {
                    ae.Handle((ex) =>
                    {
                        Console.WriteLine(ex.GetType().Name);
                        Console.WriteLine(" " + ex.Message);
                        if (ex is WPException)
                        {
                            lblAuth.Visible = false;
                            errorMesseage(ex.Message);
                            return true;
                        }
                        else
                        {
                            return false;
                        }
                    });
                }
                catch (Exception ex)
                {
                    lblAuth.Visible = false;
                    errorMesseage(ex.Message);
                }
            }

認証が成功したら、次は投稿

                string strUrl = wp.siteUrl;
                var client = new WordPressClient(strUrl + "wp-json");
                try
                {
                    client.AuthMethod = AuthMethod.JWT;
                    client.SetJWToken(wp.siteToken);
                    //
                    Post entry = new Post();
                    //
                    entry.Categories = getInts(txtCategory.Text);
                    entry.Tags = getInts(txtTag.Text);
                    entry.Title = new Title(txtTitle.Text);
                    entry.Content = new Content(txtBody.Text);
                    //
                    if (txtMedia.Text != "")
                    {
                        try
                        {
                            int iMedia = int.Parse(txtMedia.Text);
                            entry.FeaturedMedia = iMedia;
                        }
                        catch
                        {

                        }
                    }
                    //
                    var post = client.Posts.Create(entry);
                    post.Wait();
                    //
                    var result = post.Result;
                    //
                    txtWPUrl.Text = result.Link;
                    //
                    wp.lastCategory = txtCategory.Text;
                    wp.lastTag = txtTag.Text;
                    wp.lastMedia = txtMedia.Text;
                    saveWPData(wp);
                }
                catch (AggregateException ae)
                {
                    ae.Handle((ex) =>
                    {
                        if (ex is WPException)
                        {
                            errorMesseage(ex.Message);
                            return true;
                        }
                        else
                        {
                            return false;
                        }
                    });
                }
                catch (Exception ex)
                {
                    errorMesseage(ex.Message);
                }

いろいろ余計なソースがあるけど、こんな感じで任意のWordpressに投稿が可能。

認証のTokenは永続的に使える物ではないので、都度取得するくらいのUIが良いと思います。