Go 언어로 TwitterAPI를 사용하여 트윗 검색 (Premium search API 버전)

10756 단어 5TwitterAPI
마지막으로 계속 Go 언어로 TwitterAPI를 사용하여 트윗 검색

준비하는 것



Consumer API keys
액세스 토큰
Access token secret

여기를 참조하십시오 : htps : // 아히루 8 토끼. 하테나 bぉg. 코 m / 엔 트리 / 토 라라 피 _ 케 얀 d와 켄

소스 코드



우선 OAuth 인증

main.go
    config := oauth1.NewConfig(consumerKey,  consumerSecret)
    token := oauth1.NewToken(token, tokenSecret)
    httpClient := config.Client(oauth1.NoContext, token)

여기까지는 전회와 함께.
이번에는 이용하는 JSON 데이터에 대해서도 메모.

main.go
//リクエスト
//使わないデータはコメント化するなりして無効化する必要がある。Queryだけは必須。
type Request struct{
    Query string `json:"query"`
    Next string `json:"next"`
}

//レスポンス
//RequestParametersというのがあったけど今回は無視。
type Response struct{
    Results []Tweet `json:"results"`
    Next string `json:"next"`
}

Results가 Twitter 객체의 배열을 반환합니다. Sandbox의 SearchAPI에서는 한 번의 요청으로 100개까지의 트윗 밖에 취할 수 없기 때문에, 이전에 돌아온 Response 안에 있는 Next를 다음의 요구시에 지정해 한층 더 100개의 데이터를 가져올 필요가 있다 . Next가 돌아오지 않았을 경우 데이터를 다루었다.

Request를 던져 response의 body를 보면 제대로 데이터가 돌아오고 있는데 JSON을 퍼스 할 수 없었지만, 아무래도 Results가 results가 되어 있던 것 같다. 어쩌면 첫 문자는 대문자가 아니면 안 되는지도.

다음은 Response를 받는 함수.

main.go
func search(client *http.Client, search *Request)(Response, error){
    encoded, err := json.Marshal(search)
    //今回はPOST
    req, err := http.NewRequest(
        "POST",
        "https://api.twitter.com/1.1/tweets/search/30day/[Dev environment label].json",//30dayかfullarchive
        bytes.NewBuffer(encoded),
    )
    if err != nil {
        return Response{}, err
    }

    req.Header.Set("Content-Type", "application/json")

    //レスポンス
    response, err := client.Do(req)
    if err != nil {
        return Response{}, err
    }

    b, err := ioutil.ReadAll(response.Body)
    if err != nil {
        return Response{}, err
    }

    var result Response
    json.Unmarshal(b, &result)
    response.Body.Close()

    return result ,nil
}

지정하는 URL은 30일간의 트윗을 취하는지, 제한 없이 트윗을 취해 오는지에 따라 바뀐다.
전자의 경우
htps : // 아피. 라고 r. 이 m / 1.1 / environment label].json
후자의 경우
htps : // 아피. 라고 r. 이 m / 1.1 / ぇ ts / 세아 rch / 훗 r 치 ょ / "에서 v environment label].json

[Dev environment label]은 그림 1에 갔던 그림 2의 문자열입니다.

그림 1 : TwitterAPI 참조 화면


그림 2: Dev Environments

마지막으로 main 함수로 받은 트윗을 표시할 수 있도록 한다.

main.go
func main(){
    config := oauth1.NewConfig(consumerKey,  consumerSecret)
    token := oauth1.NewToken(token, tokenSecret)
    httpClient := config.Client(oauth1.NoContext, token)

    result, err := search(httpClient, &Request{
        Query:"#golang",
    })
    if err != nil{
        fmt.Println(err)
    }

    for _, tweet := range result.Results{
        fmt.Println("text:"+tweet.Text)
    }
}

JSON에서도 썼지만, 100개 이상 트윗을 받고 싶은 경우, 지난번 받은 Next의 값을 다음 Request에 넣을 필요가 있다. 이번에, 이 최저한의 기능이 생겼을 때에 무료 사용 기간이 와 버려 디버그를 잠시 할 수 없게 되어 버렸기 때문에 거기까지 시도할 수 없지만(부끄럽다…), 알고리즘은 아마

시작 요청 (다음 지정 없음)

다음 요청 (Next 지정 있음)

다음 요청 (Next 지정 있음)
↓이하 루프 처리
.
.
.

데이터 끝 (Next가 반환되지 않음)

같은 느낌이 될지도.

이번에도 Tweet 객체의 내용이나 Request, Response도 완전하게는 설명되어 있지 않으므로, 더 자세히 보고 싶은 분은 API 참조 를 참조해 주세요.

좋은 웹페이지 즐겨찾기