Go 언어로 TwitterAPI를 사용하여 트윗 검색 (Premium search API 버전)
10756 단어 5TwitterAPI
준비하는 것
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 참조 를 참조해 주세요.
Reference
이 문제에 관하여(Go 언어로 TwitterAPI를 사용하여 트윗 검색 (Premium search API 버전)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/int_main_Nick/items/1ce77651d10564161ed1텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)