Integromat + AzureFunctions로 스크래핑 해 보았습니다.

시도한 이유



왠지 설날 히마였기 때문에 엿보기로 프로그램을 만들고 싶었다.
그리고 Azure Functions도 사용하고 싶었다.

만드는 것



매일 아침 정해진 시간에 Yahoo 운세의 사이트에 액세스해, 자신의 별자리의 운세 결과를 메일 통지해 주는 시스템

구성



전반적인 제어 -> Integromat로 만들기
html을 구문 분석하는 API -> Azure Functions로 구현

Integromat은 무엇입니까? 라고 사람은 여기

만든 것 (Azure Functions 측)



아래와 같이 html과 xpath의 배열을 받고, xpath에 대응하는 값의 취득 결과를 돌려주는 webAPI를 만들었다.
자신 밖에 사용하지 않기 때문에 에러 처리라든지는 없음.

요청 json 데이터 샘플
{
   "html": "<html><body><div id=\"a\">val</div></body></html>",
   "xpathes": 
    [
        "//*[@id=\"a\"]",
        "//*[@id=\"lnk02\"]/div/div/div/div/div/div[1]/div/div/p"
    ]
}

응답 json 데이터 샘플
{
    "Values":["val"]
}

실장 코드는 이하. HtmlAgilityPack이라는 패키지를 사용.
Azure Functions에서 NuGet 패키지를 사용하는 방법은 여기을 참고했다.

run.csx
using System.Net;
using System.Xml;
using HtmlAgilityPack;

public class XPathResponse
{
    public string[] Values;
}

public static async Task<HttpResponseMessage> Run(HttpRequestMessage req, TraceWriter log)
{
    dynamic data = await req.Content.ReadAsAsync<object>();
    string html = data.html;
    var xpathes = data.xpathes;

    var htmlDoc = new HtmlDocument();
    htmlDoc.LoadHtml(html);
    List<string> list = new List<string>();

    foreach(string xpath in xpathes)
    {
        var doc = htmlDoc.DocumentNode.SelectSingleNode(xpath);
        if(doc != null)
        {
           list.Add(doc.InnerHtml);
        }
        log.Info(xpath);
    }
    XPathResponse resp = new XPathResponse();
    resp.Values = list.ToArray();

    return req.CreateResponse(HttpStatusCode.OK, resp);
}

만든 것(Integromat측)



간단한 시나리오를 만듭니다.


시나리오의 스쿠쇼만 붙여도 모르기 때문에 대략 설명하면

매일 아침 특정 시간이 되면 발화해, Yahoo 운세의 사이트에 액세스해, 그 날의 운세의 html 페이지를 취득.

취득한 html 데이터와 해석용 XPath로 json 데이터를 만들어, 이전의 Azure Functions로 만든 API에 던진다.

API의 응답 데이터를 본문과 제목으로 Gmail로 이메일을 보내세요.

이것만.
사실은 Google Home에 말하자고 생각했지만 디폴트로 운세 기능이 붙어 있었다(「오늘의 운세는?」라고 들으면 대답해 주었다) 때문에 그만두었다.

감상



서버나 아무것도 생각하지 않고 API 만들 수 있는 Azure Functions는 위대하다.
전체 제어는 Integromat에서 하고, 코드 써야 하는 곳은 Azure Functions에서 하는 구조로 가면 유연하게 대응할 수 있다.
Logic App과 Azure Functions의 조합이 Microsoft적으로는 왕도이겠지만 Logic App은 아직 사용한 적이 없기 때문에 이번 만져보고 싶다.

좋은 웹페이지 즐겨찾기