Skip to content

【UiPath】UiPath 天気を取得するアクティビティを作ってみる

Posted in ノート

Last updated on 2023年2月24日

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型となっています。

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



最後に


いかがだったでしょうか。
天気を取得することができましたでしょうか。今後も暇つぶしに連携については書いていきますのでたまに覗いていただければと思います。

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

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

では。