WordPressPCLの記事一覧

2020/05/16

【覚書】WordPressのタグをC#から追加(WordPressPCL)

WordPressPCL を使って、C#から管理しているWordPress に記事を投稿する。
その時に、同時にタグを追加したい場合がある。っていうか、それができないと不便。

だから、作ってみた。

            string strUrl = wp.siteUrl;
            var client = new WordPressClient(strUrl + "wp-json");
            try
            {
                client.AuthMethod = AuthMethod.JWT;
                client.SetJWToken(wp.siteToken);
                //
                WordPressPCL.Models.Tag entry = new Tag();
                entry.Name = strTag;
                //
                var ctask = client.Tags.Create(entry);
                ctask.Wait();
                var tags = ctask.Result;
                //
                strRet = tags.Id.ToString();
            }
            catch (AggregateException ae)
            {
                ae.Handle((ex) =>
                {
                    if (ex is WPException)
                    {
                        errorMesseage(ex.Message);
                        return true;
                    }
                    else
                    {
                        return false;
                    }
                });
            }
            catch (Exception ex)
            {
                errorMesseage(ex.Message);
            }

最終的に登録したタグのIDを取得するのは、記事を投稿する時に、必要になるのはIDだからです。

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が良いと思います。