Skip to content

UiPath 天気を取得するアクティビティを開発した

Posted in Notes

Last updated on 2021年5月30日

みなさんどうも、エピックです。
RPAの動向についてまた最近見るようにしているのですが、いろいろなSaaSとの連携が本格化してきましたね。
それも画面上の自動化ではなくAPIの利用による連携が目立っているように感じます。

API連携については、Httpのアクティビティを利用すれば従来のように自動化できますがここまでするとプログラミングをするのと大差無い気がしています。
そこでこれからは暇つぶしもかねいろいろなAPI呼び出しのカスタムアクティビティを作ってみたいと思います。


天気予報 APIを呼び出す

今回は天気予報APIです。

日常的にベーシックな情報という意味でも使えるタイミングは多いのではないしょうか。

APIとして利用させていただくのは下記のサイトになります。

「livedoor 天気APIが終了して・・・」ということが書かれているので個人で運営されているのでしょうか。

すごく気になります。


コード

カスタムアクティビティの開発については以前に記事を書いているのでそちらを参考にしてください。

ここでは解説は省きますm(__)m

下記コードです。

using System;
using System.Threading.Tasks;
using System.Activities;
using System.ComponentModel;
using Newtonsoft.Json.Linq;
using System.Threading;
using System.Net.Http;
using Newtonsoft.Json;


namespace CustomActivityByEpic
{
    public class WeatherAPI : CodeActivity
    {
        [Description("String型:CityIdを入力")]
        [Category("Input")]
        [RequiredArgument]
        public InArgument<Int32> City { get; set; }

        [Description("JsonObjectを出力")]
        [Category("Output")]
        [RequiredArgument]
        public OutArgument<JObject> JObject { get; set; }

        protected override void Execute(CodeActivityContext context)
        {
            JObject res_obj = AsyncHelper.RunSync<JObject>(() => ReadUnitsAsync());

            JObject.Set(context, res_obj);


            async Task<JObject> ReadUnitsAsync()
            {

                var cityId = City.Get(context).ToString();
                var url = string.Format("https://weather.tsukumijima.net/api/forecast");

                RestSharp.RestClient client = new RestSharp.RestClient(url);

                RestSharp.RestRequest request = new RestSharp.RestRequest(RestSharp.Method.GET);
                request.AddQueryParameter("city", cityId);
                request.RequestFormat = RestSharp.DataFormat.Json;
                HttpClientHandler httpClientHandler = new HttpClientHandler();

                var response = await client.ExecuteAsync(request);
                JObject obj = (JObject)JsonConvert.DeserializeObject(response.Content);

                return obj;
            }
        }
        internal static class AsyncHelper
        {
            private static readonly TaskFactory _myTaskFactory = new TaskFactory(CancellationToken.None, TaskCreationOptions.None, TaskContinuationOptions.None, TaskScheduler.Default);

            public static TResult RunSync<TResult>(Func<Task<TResult>> func)
            {
                return AsyncHelper._myTaskFactory.StartNew<Task<TResult>>(func).Unwrap<TResult>().GetAwaiter().GetResult();
            }

            public static void RunSync(Func<Task> func)
            {
                AsyncHelper._myTaskFactory.StartNew<Task>(func).Unwrap().GetAwaiter().GetResult();
            }
        }
    }
}

利用方法

このアクティビティは次の引数が必要になります。

Cityについては天気を取得する地域のIDとなります。

JObjectは、APIの返答として受け取るJson形式のデータになります。

UiPathの型としてJObjectは指定可能なので、変数作成の際は【Ctrl】+【K】で作成してしまうほうが楽かと思います。

また、JObjectから値を取り出す際は、Item(x)のメソッドを利用します。

上記では、jsonという変数がJObject型となっています。

実行例と結果は次のようになります。



最後に


いかがだったでしょうか。
天気を取得することができましたでしょうか。
RPAを利用するとどうしてもAPIを利用するということも有るかと思いますがニッチなサービスは公式で用意されていないことがほとんどですよね。
今後も暇つぶしに色々追加していきますのでたまに覗いていただければと思います。

質問等はコメント欄にて受け付けております。

今回も最後までお読みいただきありがとうございました。

では。

出版社 : 秀和システム (2020/10/30) 発売日 : 2020/10/30

Be First to Comment

コメントを残す