Power BI Desktop에서 Connpass 이벤트 구문 분석

이번은 Connpass 의 이벤트 데이터를 취해 보겠습니다.

Connpass API



API 참조 에 따르면 이벤트 검색 쿼리입니다.
이번에는 특정 그룹의 이벤트를 각각 취해 보겠습니다.

그룹의 이벤트 주소



시리즈 (3366은 Power BI 스터디)
htps : // 곤파 s. 코 m / 아피 / v1 / 에이 t? 세리에 s_i d = 3366

페이징



응답에 포함된 정보와 count, start 매개 변수를 사용하여 페이징할 수 있습니다.
{
    "results_start": 1,
    "results_returned": 10,
    "results_available": 38,
    "events": [...]
}

Postman에서 실행해보기



htps : // 곤파 s. 코 m / 아피 / v1 / 에이 t? 세리에 s_i d = 3366 & s rt = 1 & Koun t = 5 실행


Power BI로 보고서 만들기



1. Power BI Desktop을 열고 데이터 가져오기를 클릭합니다.


2. "빈 쿼리"를 추가.


3. "고급 편집기"를 클릭하여 아래 코드를 붙입니다.
let
    Count = 10,
    Series_Id = 3366,
    GetConnpassEvents = (start as number) => 
        let
            data = Web.Contents("https://connpass.com/api/v1/event?series_id="& Number.ToText(Series_Id) & "&count=" & Number.ToText(Count) & "&start=" & Number.ToText(start))
        in
            data,  
    AllEventsRawData = List.Generate(
        ()=> GetConnpassEvents(1),
        each Json.Document(_)[results_returned] > 0,
        each GetConnpassEvents(Json.Document(_)[results_start]+Json.Document(_)[results_returned])
    ),    
    AllEventsList = List.Transform(AllEventsRawData, (_) => Json.Document(_)[events]),
    AllEvents = Table.FromList(List.Combine(AllEventsList), Splitter.SplitByNothing(), null, null, ExtraValues.Error),
    ExpandColumns = Table.ExpandRecordColumn(AllEvents, "Column1", {"event_id", "title", "catch", "description", "event_url", "started_at", "ended_at", "limit", "hash_tag", "event_type", "accepted", "waiting", "updated_at", "owner_id", "owner_nickname", "owner_display_name", "place", "address", "lat", "lon", "series"}, {"event_id", "title", "catch", "description", "event_url", "started_at", "ended_at", "limit", "hash_tag", "event_type", "accepted", "waiting", "updated_at", "owner_id", "owner_nickname", "owner_display_name", "place", "address", "lat", "lon", "series"}),
    ConvertGeolocationType = Table.TransformColumnTypes(ExpandColumns,{{"lat", type number}, {"lon", type number}}),
    ConvertIntType = Table.TransformColumnTypes(ConvertGeolocationType,{{"waiting", Int64.Type}, {"accepted", Int64.Type}, {"limit", Int64.Type}}),
    ConvertDateType = Table.TransformColumns(ConvertIntType,{{"ended_at", each Date.From(DateTimeZone.From(_)), type date}, {"started_at", each Date.From(DateTimeZone.From(_)), type date}, {"updated_at", each Date.From(DateTimeZone.From(_)), type date}}),
    ExpandSeries = Table.ExpandRecordColumn(ConvertDateType, "series", {"id", "title", "url"}, {"series.id", "series.title", "series.url"})
in
    ExpandSeries

4. 쿼리 이름을 이벤트로 변경하고 닫고 적용을 클릭합니다.


5. 보고서를 작성합니다.


코드 설명



Power Query 및 M 언어에 대해서는 다음 기사가 훌륭하므로 참조하십시오.
Power Query는 조금 이상한 곳이 있지만, 알아두는 것이 좋은 일이 있다는 이야기를 했다

그럼 이번 코드입니다.

처음에 변수 설정
let
    Count = 10,
    Series_Id = 3366,

Web.Contents 함수를 사용하여 Connpass API에서 이벤트를 가져옵니다. 인수로 시작 번호를 전달하는 것 외에 숫자를 텍스트로 변환하기 위해 Number.ToText를 사용합니다.
    GetConnpassEvents = (start as number) => 
        let
            data = Web.Contents("https://connpass.com/api/v1/event?series_id="& Number.ToText(Series_Id) & "&count=" & Number.ToText(Count) & "&start=" & Number.ToText(start))
        in
            data,  


이벤트수에 따라서는 복수회 GetConnpassEvents 를 부르게 되므로, List.Generate 를 이용.
  • 초기화로 GetConnpassEvents (1)를 호출해, 최초 1 페이지의 이벤트를 취득
  • Json.Document(_) 에 있는 _는 GetConnpassEvents의 결과이므로 Web.Contents의 반환 값
  • 반환값을 Json.Document 로 해석해, results_returned 를 사용해 처리를 계속할지 확인. 레코드가 반환되는 한 다음을 실행하십시오
  • 2 번째 이후는 반환값의 results_startresults_returned 의 값으로부터 start 의 값을 만든다
  •     AllEventsRawData = List.Generate(
            ()=> GetConnpassEvents(1),
            each Json.Document(_)[results_returned] > 0,
            each GetConnpassEvents(Json.Document(_)[results_start]+Json.Document(_)[results_returned])
        ),    
    

    List.Transform 에서 상기의 AllEventsRawData 를 호출해, 결과로부터 events 만을 꺼낸다.
        AllEventsList = List.Transform(AllEventsRawData, (_) => Json.Document(_)[events]),
    

    그런 다음 List.Combine에서 얻은 events를 모두 병합하고 Table.FromList로 테이블화합니다.
        AllEvents = Table.FromList(List.Combine(AllEventsList), Splitter.SplitByNothing(), null, null, ExtraValues.Error),
    

    여기서부터는 GUI에서도 할 수 있는 변환을 하고 있을 뿐입니다.

    요약



    웹 API 사양에 따라 다르지만 대략 비슷한 패턴으로 데이터를 검색할 수 있습니다. 실시에는 에러의 핸들등 생각할 필요도 있습니다만, 부디 여러가지 데이터를 취해 봐 주세요.

    참조



    Power Query는 조금 이상한 곳이 있지만, 알아두는 것이 좋은 일이 있다는 이야기를 했다
    Power Query의 List.Generate 함수는 무엇입니까?
    때때로 나오는 "each" 키워드와 "_"(밑줄)

    좋은 웹페이지 즐겨찾기