Qiita 보기 수 얻기
처음에
Qiita의 LGTM 수와 View 수를 취득 할 때,
API의 사양이 바뀌었는지 참고로 한 것으로 취득할 수 없었던 부분이 있었으므로,
취득 방법을 기재해 갑니다.
환경
Go 1.15.2
1. 액세스 토큰 얻기
사용자 관리 화면 에서 토큰 얻기
범위는 read_qiita 및 write_qiita를 선택합니다.
2. 취득하고 싶은 정보의 URL을 확인
공식 문서 보다 취득하고 싶은 정보의 URL을 확인. 이번 이용하는 것은 이하의 2 종류입니다.
GET /api/v2/authenticated_user/items
認証中のユーザの記事の一覧を作成日時の降順で返します。
GET /api/v2/items/:item_id
記事を取得します。
3. json을 변환하는 struct 만들기
공식 문서에서 API를 두드릴 때 반환되는 정보가 Json에서 반환되므로,
반환된 데이터를 다루는 구조를 만듭니다.
UserInfo.gopackage data
type UserInfo struct {
Id string `json:"id"`
Likes_count int `json:"likes_count"`
Title string `json:"title"`
Page_views_count int `json:"page_views_count"`
}
4. Qiita API를 두드리는
web.gopackage qiita
import (
"../data"
"../exporter"
"encoding/json"
"io/ioutil"
"net/http"
)
func GetQiitaViews() { // main.goから呼び出す
url := "https://qiita.com/api/v2/authenticated_user/items?page=1&per_page=20"
resp, err := doHttpRequest(url)
defer resp.Body.Close() // Bodyをクローズ
body, err := ioutil.ReadAll(resp.Body) // レスポンスのBodyから取得
var userInfos []data.UserInfo
if err = json.Unmarshal(body, &userInfos); err != nil { // jsonの読み出し
return
}
index := 0
for _, user := range userInfos { // 1記事ずつ読み出す
url = "https://qiita.com/api/v2/items/" + user.Id // 記事のIDを利用、view数を取得
resp, err := doHttpRequest(url)
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err := json.Unmarshal(body, &user); err != nil {return}
userInfos[index].Page_views_count = user.Page_views_count
index += 1
}
exporter.ToCsv(userInfos) // csv化
}
func doHttpRequest(url string) (*http.Response, error) { // リクエストを共通化
req, _ := http.NewRequest("GET", url, nil)
buf, _ := ioutil.ReadFile("token.txt")
token := string(buf) // tokenを別ファイルで管理
req.Header.Set("content-type", "application/json") // ヘッダーにapplication/jsonを指定
req.Header.Set("Authorization", "Bearer " + token) // ヘッダーにtokenを指定
client := new(http.Client)
resp, err := client.Do(req)
return resp, err
}
아래의 API만으로는 얻을 수 없는 것 같고,
URL을 쿼리해야 한다는 것을 처음 깨닫지 못했고 검색할 수 없었습니다.
또한 page_view_count가 null (Go로 struct에 넣으면 0)이 반환되어 버리기 때문에,
조회수는 기사별로 검색해야 하는 것 같습니다.
【Qiita API】 좋다! 조회수 자동 집계 의 기사를 참고로 했습니다.
GET /api/v2/authenticated_user/items
認証中のユーザの記事の一覧を作成日時の降順で返します。
그래서 다음의 API를 이용하고 있습니다.
GET /api/v2/items/:item_id
記事を取得します。
5. CSV 출력
export.gopackage exporter
import (
"../data"
"encoding/csv"
"os"
"strconv"
)
func ToCsv(userInfos []data.UserInfo) {
file, _ := os.OpenFile("result.csv", os.O_WRONLY|os.O_CREATE, 0600) //ファイルを開く
defer file.Close()
writer := csv.NewWriter(file)
writer.Write([]string{"title", "like_count", "page_views_count"}) // ヘッダーをつける
for _, user := range userInfos {
likesCount := strconv.Itoa(user.Likes_count) // intをstringへ変換
pageViewsCount := strconv.Itoa(user.Page_views_count)
writer.Write([]string{user.Title, likesCount, pageViewsCount}) // 書き込み
}
writer.Flush()
}
마지막으로
소스는 여기에 있습니다.
GitHub에 소스를 올리는 관계상,
token 정보는 main.go와 동일한 디렉토리 내의 다른 파일에서 관리하고 있습니다.
에러 핸들링은 일부 생략하고 있는 부분이 있습니다.
참고문헌
공식
【Qiita API】 좋다! 조회수 자동 집계
Go 언어로 CSV를 내보냅니다! 엑셀 용 SJIS 버전도!
Go의 import cycle not allowed(순환 참조) 대응
Reference
이 문제에 관하여(Qiita 보기 수 얻기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/kurramkurram/items/26aa507000958ffa41bd
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Go 1.15.2
1. 액세스 토큰 얻기
사용자 관리 화면 에서 토큰 얻기
범위는 read_qiita 및 write_qiita를 선택합니다.
2. 취득하고 싶은 정보의 URL을 확인
공식 문서 보다 취득하고 싶은 정보의 URL을 확인. 이번 이용하는 것은 이하의 2 종류입니다.
GET /api/v2/authenticated_user/items
認証中のユーザの記事の一覧を作成日時の降順で返します。
GET /api/v2/items/:item_id
記事を取得します。
3. json을 변환하는 struct 만들기
공식 문서에서 API를 두드릴 때 반환되는 정보가 Json에서 반환되므로,
반환된 데이터를 다루는 구조를 만듭니다.
UserInfo.gopackage data
type UserInfo struct {
Id string `json:"id"`
Likes_count int `json:"likes_count"`
Title string `json:"title"`
Page_views_count int `json:"page_views_count"`
}
4. Qiita API를 두드리는
web.gopackage qiita
import (
"../data"
"../exporter"
"encoding/json"
"io/ioutil"
"net/http"
)
func GetQiitaViews() { // main.goから呼び出す
url := "https://qiita.com/api/v2/authenticated_user/items?page=1&per_page=20"
resp, err := doHttpRequest(url)
defer resp.Body.Close() // Bodyをクローズ
body, err := ioutil.ReadAll(resp.Body) // レスポンスのBodyから取得
var userInfos []data.UserInfo
if err = json.Unmarshal(body, &userInfos); err != nil { // jsonの読み出し
return
}
index := 0
for _, user := range userInfos { // 1記事ずつ読み出す
url = "https://qiita.com/api/v2/items/" + user.Id // 記事のIDを利用、view数を取得
resp, err := doHttpRequest(url)
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err := json.Unmarshal(body, &user); err != nil {return}
userInfos[index].Page_views_count = user.Page_views_count
index += 1
}
exporter.ToCsv(userInfos) // csv化
}
func doHttpRequest(url string) (*http.Response, error) { // リクエストを共通化
req, _ := http.NewRequest("GET", url, nil)
buf, _ := ioutil.ReadFile("token.txt")
token := string(buf) // tokenを別ファイルで管理
req.Header.Set("content-type", "application/json") // ヘッダーにapplication/jsonを指定
req.Header.Set("Authorization", "Bearer " + token) // ヘッダーにtokenを指定
client := new(http.Client)
resp, err := client.Do(req)
return resp, err
}
아래의 API만으로는 얻을 수 없는 것 같고,
URL을 쿼리해야 한다는 것을 처음 깨닫지 못했고 검색할 수 없었습니다.
또한 page_view_count가 null (Go로 struct에 넣으면 0)이 반환되어 버리기 때문에,
조회수는 기사별로 검색해야 하는 것 같습니다.
【Qiita API】 좋다! 조회수 자동 집계 의 기사를 참고로 했습니다.
GET /api/v2/authenticated_user/items
認証中のユーザの記事の一覧を作成日時の降順で返します。
그래서 다음의 API를 이용하고 있습니다.
GET /api/v2/items/:item_id
記事を取得します。
5. CSV 출력
export.gopackage exporter
import (
"../data"
"encoding/csv"
"os"
"strconv"
)
func ToCsv(userInfos []data.UserInfo) {
file, _ := os.OpenFile("result.csv", os.O_WRONLY|os.O_CREATE, 0600) //ファイルを開く
defer file.Close()
writer := csv.NewWriter(file)
writer.Write([]string{"title", "like_count", "page_views_count"}) // ヘッダーをつける
for _, user := range userInfos {
likesCount := strconv.Itoa(user.Likes_count) // intをstringへ変換
pageViewsCount := strconv.Itoa(user.Page_views_count)
writer.Write([]string{user.Title, likesCount, pageViewsCount}) // 書き込み
}
writer.Flush()
}
마지막으로
소스는 여기에 있습니다.
GitHub에 소스를 올리는 관계상,
token 정보는 main.go와 동일한 디렉토리 내의 다른 파일에서 관리하고 있습니다.
에러 핸들링은 일부 생략하고 있는 부분이 있습니다.
참고문헌
공식
【Qiita API】 좋다! 조회수 자동 집계
Go 언어로 CSV를 내보냅니다! 엑셀 용 SJIS 버전도!
Go의 import cycle not allowed(순환 참조) 대응
Reference
이 문제에 관하여(Qiita 보기 수 얻기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/kurramkurram/items/26aa507000958ffa41bd
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
공식 문서 보다 취득하고 싶은 정보의 URL을 확인. 이번 이용하는 것은 이하의 2 종류입니다.
GET /api/v2/authenticated_user/items
認証中のユーザの記事の一覧を作成日時の降順で返します。
GET /api/v2/items/:item_id
記事を取得します。
3. json을 변환하는 struct 만들기
공식 문서에서 API를 두드릴 때 반환되는 정보가 Json에서 반환되므로,
반환된 데이터를 다루는 구조를 만듭니다.
UserInfo.gopackage data
type UserInfo struct {
Id string `json:"id"`
Likes_count int `json:"likes_count"`
Title string `json:"title"`
Page_views_count int `json:"page_views_count"`
}
4. Qiita API를 두드리는
web.gopackage qiita
import (
"../data"
"../exporter"
"encoding/json"
"io/ioutil"
"net/http"
)
func GetQiitaViews() { // main.goから呼び出す
url := "https://qiita.com/api/v2/authenticated_user/items?page=1&per_page=20"
resp, err := doHttpRequest(url)
defer resp.Body.Close() // Bodyをクローズ
body, err := ioutil.ReadAll(resp.Body) // レスポンスのBodyから取得
var userInfos []data.UserInfo
if err = json.Unmarshal(body, &userInfos); err != nil { // jsonの読み出し
return
}
index := 0
for _, user := range userInfos { // 1記事ずつ読み出す
url = "https://qiita.com/api/v2/items/" + user.Id // 記事のIDを利用、view数を取得
resp, err := doHttpRequest(url)
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err := json.Unmarshal(body, &user); err != nil {return}
userInfos[index].Page_views_count = user.Page_views_count
index += 1
}
exporter.ToCsv(userInfos) // csv化
}
func doHttpRequest(url string) (*http.Response, error) { // リクエストを共通化
req, _ := http.NewRequest("GET", url, nil)
buf, _ := ioutil.ReadFile("token.txt")
token := string(buf) // tokenを別ファイルで管理
req.Header.Set("content-type", "application/json") // ヘッダーにapplication/jsonを指定
req.Header.Set("Authorization", "Bearer " + token) // ヘッダーにtokenを指定
client := new(http.Client)
resp, err := client.Do(req)
return resp, err
}
아래의 API만으로는 얻을 수 없는 것 같고,
URL을 쿼리해야 한다는 것을 처음 깨닫지 못했고 검색할 수 없었습니다.
또한 page_view_count가 null (Go로 struct에 넣으면 0)이 반환되어 버리기 때문에,
조회수는 기사별로 검색해야 하는 것 같습니다.
【Qiita API】 좋다! 조회수 자동 집계 의 기사를 참고로 했습니다.
GET /api/v2/authenticated_user/items
認証中のユーザの記事の一覧を作成日時の降順で返します。
그래서 다음의 API를 이용하고 있습니다.
GET /api/v2/items/:item_id
記事を取得します。
5. CSV 출력
export.gopackage exporter
import (
"../data"
"encoding/csv"
"os"
"strconv"
)
func ToCsv(userInfos []data.UserInfo) {
file, _ := os.OpenFile("result.csv", os.O_WRONLY|os.O_CREATE, 0600) //ファイルを開く
defer file.Close()
writer := csv.NewWriter(file)
writer.Write([]string{"title", "like_count", "page_views_count"}) // ヘッダーをつける
for _, user := range userInfos {
likesCount := strconv.Itoa(user.Likes_count) // intをstringへ変換
pageViewsCount := strconv.Itoa(user.Page_views_count)
writer.Write([]string{user.Title, likesCount, pageViewsCount}) // 書き込み
}
writer.Flush()
}
마지막으로
소스는 여기에 있습니다.
GitHub에 소스를 올리는 관계상,
token 정보는 main.go와 동일한 디렉토리 내의 다른 파일에서 관리하고 있습니다.
에러 핸들링은 일부 생략하고 있는 부분이 있습니다.
참고문헌
공식
【Qiita API】 좋다! 조회수 자동 집계
Go 언어로 CSV를 내보냅니다! 엑셀 용 SJIS 버전도!
Go의 import cycle not allowed(순환 참조) 대응
Reference
이 문제에 관하여(Qiita 보기 수 얻기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/kurramkurram/items/26aa507000958ffa41bd
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
package data
type UserInfo struct {
Id string `json:"id"`
Likes_count int `json:"likes_count"`
Title string `json:"title"`
Page_views_count int `json:"page_views_count"`
}
web.go
package qiita
import (
"../data"
"../exporter"
"encoding/json"
"io/ioutil"
"net/http"
)
func GetQiitaViews() { // main.goから呼び出す
url := "https://qiita.com/api/v2/authenticated_user/items?page=1&per_page=20"
resp, err := doHttpRequest(url)
defer resp.Body.Close() // Bodyをクローズ
body, err := ioutil.ReadAll(resp.Body) // レスポンスのBodyから取得
var userInfos []data.UserInfo
if err = json.Unmarshal(body, &userInfos); err != nil { // jsonの読み出し
return
}
index := 0
for _, user := range userInfos { // 1記事ずつ読み出す
url = "https://qiita.com/api/v2/items/" + user.Id // 記事のIDを利用、view数を取得
resp, err := doHttpRequest(url)
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err := json.Unmarshal(body, &user); err != nil {return}
userInfos[index].Page_views_count = user.Page_views_count
index += 1
}
exporter.ToCsv(userInfos) // csv化
}
func doHttpRequest(url string) (*http.Response, error) { // リクエストを共通化
req, _ := http.NewRequest("GET", url, nil)
buf, _ := ioutil.ReadFile("token.txt")
token := string(buf) // tokenを別ファイルで管理
req.Header.Set("content-type", "application/json") // ヘッダーにapplication/jsonを指定
req.Header.Set("Authorization", "Bearer " + token) // ヘッダーにtokenを指定
client := new(http.Client)
resp, err := client.Do(req)
return resp, err
}
아래의 API만으로는 얻을 수 없는 것 같고,
URL을 쿼리해야 한다는 것을 처음 깨닫지 못했고 검색할 수 없었습니다.
또한 page_view_count가 null (Go로 struct에 넣으면 0)이 반환되어 버리기 때문에,
조회수는 기사별로 검색해야 하는 것 같습니다.
【Qiita API】 좋다! 조회수 자동 집계 의 기사를 참고로 했습니다.
GET /api/v2/authenticated_user/items
認証中のユーザの記事の一覧を作成日時の降順で返します。
그래서 다음의 API를 이용하고 있습니다.
GET /api/v2/items/:item_id
記事を取得します。
5. CSV 출력
export.gopackage exporter
import (
"../data"
"encoding/csv"
"os"
"strconv"
)
func ToCsv(userInfos []data.UserInfo) {
file, _ := os.OpenFile("result.csv", os.O_WRONLY|os.O_CREATE, 0600) //ファイルを開く
defer file.Close()
writer := csv.NewWriter(file)
writer.Write([]string{"title", "like_count", "page_views_count"}) // ヘッダーをつける
for _, user := range userInfos {
likesCount := strconv.Itoa(user.Likes_count) // intをstringへ変換
pageViewsCount := strconv.Itoa(user.Page_views_count)
writer.Write([]string{user.Title, likesCount, pageViewsCount}) // 書き込み
}
writer.Flush()
}
마지막으로
소스는 여기에 있습니다.
GitHub에 소스를 올리는 관계상,
token 정보는 main.go와 동일한 디렉토리 내의 다른 파일에서 관리하고 있습니다.
에러 핸들링은 일부 생략하고 있는 부분이 있습니다.
참고문헌
공식
【Qiita API】 좋다! 조회수 자동 집계
Go 언어로 CSV를 내보냅니다! 엑셀 용 SJIS 버전도!
Go의 import cycle not allowed(순환 참조) 대응
Reference
이 문제에 관하여(Qiita 보기 수 얻기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/kurramkurram/items/26aa507000958ffa41bd
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
package exporter
import (
"../data"
"encoding/csv"
"os"
"strconv"
)
func ToCsv(userInfos []data.UserInfo) {
file, _ := os.OpenFile("result.csv", os.O_WRONLY|os.O_CREATE, 0600) //ファイルを開く
defer file.Close()
writer := csv.NewWriter(file)
writer.Write([]string{"title", "like_count", "page_views_count"}) // ヘッダーをつける
for _, user := range userInfos {
likesCount := strconv.Itoa(user.Likes_count) // intをstringへ変換
pageViewsCount := strconv.Itoa(user.Page_views_count)
writer.Write([]string{user.Title, likesCount, pageViewsCount}) // 書き込み
}
writer.Flush()
}
소스는 여기에 있습니다.
GitHub에 소스를 올리는 관계상,
token 정보는 main.go와 동일한 디렉토리 내의 다른 파일에서 관리하고 있습니다.
에러 핸들링은 일부 생략하고 있는 부분이 있습니다.
참고문헌
공식
【Qiita API】 좋다! 조회수 자동 집계
Go 언어로 CSV를 내보냅니다! 엑셀 용 SJIS 버전도!
Go의 import cycle not allowed(순환 참조) 대응
Reference
이 문제에 관하여(Qiita 보기 수 얻기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/kurramkurram/items/26aa507000958ffa41bd
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(Qiita 보기 수 얻기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/kurramkurram/items/26aa507000958ffa41bd텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)