Qiita 조회수를 MQTT로 기록
좋아요 숫자라도 어느 정도 인기는 알겠지만, View수의 상승률을 알면, 좀 더 자세하게 여러분이 요구하고 있는 것을 알 수 있는 것은 아닐까 생각했습니다.
전회에 계속해서 MQTT로 AWS IoT에 Publish 합니다만, 이번은, Qiita API를 이용해 자신의 투고의 열람수를 정기적으로 취득해, 축적하고 싶습니다.
(가시화는 그 후에...라고 말하면서 잘 모르겠어...)
Qiita API 사양 알아보기
아래에 설명되어 있습니다.
htps : // 코 m/아피/v2/도 cs
① 우선은, 자신이 투고한 기사의 일람을 취득합니다.
GET/api/v2/authenticated_user/items
② 기사의 열람수를 포함한 기사 정보를 취득합니다.
GET/api/v2/items/:item_id
위의 작업을 수행하기 위해 사용자는 누군가를 나타내는 개인 액세스 토큰을 지불합니다.
다음 계정 페이지에서 얻을 수 있습니다.
40자 정도의 길이의 토큰이 불출되므로, 그것을 기억해 둡니다.
구현하다
조속히, 실장해 갑시다.
다음 npm 모듈을 사용합니다.
npm init -y
npm install --save node-fetch
npm install --save mqtt
npm install --save dotenv
index.jsconst fetch = require('node-fetch');
var mqtt = require('mqtt');
require('dotenv').config();
const { URLSearchParams } = require('url');
const MQTT_HOST = process.env.MQTT_HOST || 【Mosquittoサーバのホスト名】;
const MQTT_TOPIC = process.env.MQTT_TOPIC || 【Publishするトピック名】;
const QIITA_PRIVATE_TOKEN = 【個人用アクセストークン】;
console.log('MQTT_HOST=' + MQTT_HOST);
console.log('MQTT_TOPIC=' + MQTT_TOPIC);
var client = mqtt.connect(MQTT_HOST);
var base_url = 'https://qiita.com/api/v2';
function do_get_token(url, qs, token){
var params = new URLSearchParams();
for( var key in qs )
params.set(key, qs[key] );
console.log(url + '?' + params.toString());
return fetch(url + '?' + params.toString(), {
method : 'GET',
headers: { 'Content-Type': 'application/x-www-form-urlencoded', 'Authorization' : 'Bearer ' + token }
})
.then((response) => {
return response.json();
});
}
async function aggregate_views(){
try{
var json = await do_get_token(base_url + '/authenticated_user/items', {}, QIITA_PRIVATE_TOKEN )
// console.log(json);
for( var i = 0; i < json.length ; i++ ){
console.log(json[i].id);
var id = json[i].id;
var item = await do_get_token(base_url + '/items/' + id, {}, QIITA_PRIVATE_TOKEN )
// console.log(item);
var date = new Date();
var message = {
id: id,
title: item.title,
views: item.page_views_count,
likes: item.likes_count,
created_at : item.created_at,
updated_at: item.updated_at,
createdat: date.getTime(),
createdatstr: date.toLocaleString()
};
client.publish(MQTT_TOPIC, JSON.stringify(message));
}
setTimeout( ()=>{
process.exit();
}, 5000 );
}catch(err){
console.log(err);
process.exit();
}
}
aggregate_views();
게시할 데이터 형식은 다음과 같습니다. 이것은 기사의 몇 분만 게시됩니다.
var message = {
id: id,
title: item.title,
views: item.page_views_count,
likes: item.likes_count,
created_at : item.created_at,
updated_at: item.updated_att,
createdat: date.getTime(),
createdatstr: date.toLocaleString()
};
다음 부분을 환경에 맞게 변경합니다.
【Mosquitto 서버의 호스트명】
【Publish 할 주제 이름】 : Publish 할 주제 이름입니다. 예를 들면, 「awsiot/qiita」라고 합니다.
【개인 액세스 토큰】 : 방금 지불한 Qiita의 개인 액세스 토큰입니다.
다음의 흐름입니다.
① Qiita API로 시청 횟수 획득
② mqtt에서 인트라넷의 Mosquitto 서버에 Pubish
③ Mosquitto 서버는 AWS IoT로 Publish 데이터 전송
④ AWS IoT는 수신한 Publish 데이터를 DynamoDB에 저장
※②③의 부분은 이미 셋업이 완료되어 있는 전제입니다. 다음을 참고하십시오.
AWS IoT에 Mosquitto를 브리지로 연결
DynamoDB 테이블을 만듭니다.
아래 게시물에서 만든 테이블을 그대로 사용합니다.
Xiaomi Mijia 온습도계를 IoT 장치로 사용
AWS IoT 측에서 DynamoDB에 등록되도록 허용
AWS IoT에서 받은 Publish 데이터를 DynamoDB에 등록하기 위한 AWS IoT 규칙을 정의합니다.
왼쪽 네비게이터에서 ACT를 선택합니다.
오른쪽 상단 만들기를 누릅니다.
적절한 이름을 지정합니다. 예를 들어 'IoTAnalytics_qiita'
규칙 쿼리 문은 다음과 같이 지정합니다. FROM 부분은 주제 이름입니다.
SELECT * FROM 'awsiot/qiita'
액션 추가 버튼을 누릅니다.
DynamoDB 테이블에 메시지 삽입을 선택합니다.
테이블 이름은 방금 만든 DynamoDB의 테이블 이름을 지정합니다.
그러면 해시 키와 레인지 키와 그 유형이 자동으로 입력됩니다.
해시 키 값은 향후 추가 될 다른 데이터와 구별하기 위해 "qiita"로 설정되었습니다.
범위 키 값은 '${countedat}'입니다.
이 countedat는 얼마 전의 구현 중에서 설명했습니다만, Publish 데이터안의 1 항목으로, View수를 취득한 일시입니다.
실행
아래 게시물과 같은 방식입니다.
주제 이름은 이번에는 "awsiot/qiita"입니다.
Xiaomi Mijia 온습도계를 IoT 장치로 사용
DynamoDB에도 등록되었습니다.
앞으로도 좀더 좀더 얻는 데이터를 늘려나가겠습니다.
(보충) 10 분마다 열람 수를 얻습니다.
이것은 다음 게시물과 동일합니다.
Xiaomi Mijia 온습도계를 IoT 장치로 사용
이상입니다.
Reference
이 문제에 관하여(Qiita 조회수를 MQTT로 기록), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/poruruba/items/5a35503900acd6b37d70
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
조속히, 실장해 갑시다.
다음 npm 모듈을 사용합니다.
npm init -y
npm install --save node-fetch
npm install --save mqtt
npm install --save dotenv
index.js
const fetch = require('node-fetch');
var mqtt = require('mqtt');
require('dotenv').config();
const { URLSearchParams } = require('url');
const MQTT_HOST = process.env.MQTT_HOST || 【Mosquittoサーバのホスト名】;
const MQTT_TOPIC = process.env.MQTT_TOPIC || 【Publishするトピック名】;
const QIITA_PRIVATE_TOKEN = 【個人用アクセストークン】;
console.log('MQTT_HOST=' + MQTT_HOST);
console.log('MQTT_TOPIC=' + MQTT_TOPIC);
var client = mqtt.connect(MQTT_HOST);
var base_url = 'https://qiita.com/api/v2';
function do_get_token(url, qs, token){
var params = new URLSearchParams();
for( var key in qs )
params.set(key, qs[key] );
console.log(url + '?' + params.toString());
return fetch(url + '?' + params.toString(), {
method : 'GET',
headers: { 'Content-Type': 'application/x-www-form-urlencoded', 'Authorization' : 'Bearer ' + token }
})
.then((response) => {
return response.json();
});
}
async function aggregate_views(){
try{
var json = await do_get_token(base_url + '/authenticated_user/items', {}, QIITA_PRIVATE_TOKEN )
// console.log(json);
for( var i = 0; i < json.length ; i++ ){
console.log(json[i].id);
var id = json[i].id;
var item = await do_get_token(base_url + '/items/' + id, {}, QIITA_PRIVATE_TOKEN )
// console.log(item);
var date = new Date();
var message = {
id: id,
title: item.title,
views: item.page_views_count,
likes: item.likes_count,
created_at : item.created_at,
updated_at: item.updated_at,
createdat: date.getTime(),
createdatstr: date.toLocaleString()
};
client.publish(MQTT_TOPIC, JSON.stringify(message));
}
setTimeout( ()=>{
process.exit();
}, 5000 );
}catch(err){
console.log(err);
process.exit();
}
}
aggregate_views();
게시할 데이터 형식은 다음과 같습니다. 이것은 기사의 몇 분만 게시됩니다.
var message = {
id: id,
title: item.title,
views: item.page_views_count,
likes: item.likes_count,
created_at : item.created_at,
updated_at: item.updated_att,
createdat: date.getTime(),
createdatstr: date.toLocaleString()
};
다음 부분을 환경에 맞게 변경합니다.
【Mosquitto 서버의 호스트명】
【Publish 할 주제 이름】 : Publish 할 주제 이름입니다. 예를 들면, 「awsiot/qiita」라고 합니다.
【개인 액세스 토큰】 : 방금 지불한 Qiita의 개인 액세스 토큰입니다.
다음의 흐름입니다.
① Qiita API로 시청 횟수 획득
② mqtt에서 인트라넷의 Mosquitto 서버에 Pubish
③ Mosquitto 서버는 AWS IoT로 Publish 데이터 전송
④ AWS IoT는 수신한 Publish 데이터를 DynamoDB에 저장
※②③의 부분은 이미 셋업이 완료되어 있는 전제입니다. 다음을 참고하십시오.
AWS IoT에 Mosquitto를 브리지로 연결
DynamoDB 테이블을 만듭니다.
아래 게시물에서 만든 테이블을 그대로 사용합니다.
Xiaomi Mijia 온습도계를 IoT 장치로 사용
AWS IoT 측에서 DynamoDB에 등록되도록 허용
AWS IoT에서 받은 Publish 데이터를 DynamoDB에 등록하기 위한 AWS IoT 규칙을 정의합니다.
왼쪽 네비게이터에서 ACT를 선택합니다.
오른쪽 상단 만들기를 누릅니다.
적절한 이름을 지정합니다. 예를 들어 'IoTAnalytics_qiita'
규칙 쿼리 문은 다음과 같이 지정합니다. FROM 부분은 주제 이름입니다.
SELECT * FROM 'awsiot/qiita'
액션 추가 버튼을 누릅니다.
DynamoDB 테이블에 메시지 삽입을 선택합니다.
테이블 이름은 방금 만든 DynamoDB의 테이블 이름을 지정합니다.
그러면 해시 키와 레인지 키와 그 유형이 자동으로 입력됩니다.
해시 키 값은 향후 추가 될 다른 데이터와 구별하기 위해 "qiita"로 설정되었습니다.
범위 키 값은 '${countedat}'입니다.
이 countedat는 얼마 전의 구현 중에서 설명했습니다만, Publish 데이터안의 1 항목으로, View수를 취득한 일시입니다.
실행
아래 게시물과 같은 방식입니다.
주제 이름은 이번에는 "awsiot/qiita"입니다.
Xiaomi Mijia 온습도계를 IoT 장치로 사용
DynamoDB에도 등록되었습니다.
앞으로도 좀더 좀더 얻는 데이터를 늘려나가겠습니다.
(보충) 10 분마다 열람 수를 얻습니다.
이것은 다음 게시물과 동일합니다.
Xiaomi Mijia 온습도계를 IoT 장치로 사용
이상입니다.
Reference
이 문제에 관하여(Qiita 조회수를 MQTT로 기록), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/poruruba/items/5a35503900acd6b37d70
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
AWS IoT에서 받은 Publish 데이터를 DynamoDB에 등록하기 위한 AWS IoT 규칙을 정의합니다.
왼쪽 네비게이터에서 ACT를 선택합니다.
오른쪽 상단 만들기를 누릅니다.
적절한 이름을 지정합니다. 예를 들어 'IoTAnalytics_qiita'
규칙 쿼리 문은 다음과 같이 지정합니다. FROM 부분은 주제 이름입니다.
SELECT * FROM 'awsiot/qiita'
액션 추가 버튼을 누릅니다.
DynamoDB 테이블에 메시지 삽입을 선택합니다.
테이블 이름은 방금 만든 DynamoDB의 테이블 이름을 지정합니다.
그러면 해시 키와 레인지 키와 그 유형이 자동으로 입력됩니다.
해시 키 값은 향후 추가 될 다른 데이터와 구별하기 위해 "qiita"로 설정되었습니다.
범위 키 값은 '${countedat}'입니다.
이 countedat는 얼마 전의 구현 중에서 설명했습니다만, Publish 데이터안의 1 항목으로, View수를 취득한 일시입니다.
실행
아래 게시물과 같은 방식입니다.
주제 이름은 이번에는 "awsiot/qiita"입니다.
Xiaomi Mijia 온습도계를 IoT 장치로 사용
DynamoDB에도 등록되었습니다.
앞으로도 좀더 좀더 얻는 데이터를 늘려나가겠습니다.
(보충) 10 분마다 열람 수를 얻습니다.
이것은 다음 게시물과 동일합니다.
Xiaomi Mijia 온습도계를 IoT 장치로 사용
이상입니다.
Reference
이 문제에 관하여(Qiita 조회수를 MQTT로 기록), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/poruruba/items/5a35503900acd6b37d70
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
이것은 다음 게시물과 동일합니다.
Xiaomi Mijia 온습도계를 IoT 장치로 사용
이상입니다.
Reference
이 문제에 관하여(Qiita 조회수를 MQTT로 기록), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/poruruba/items/5a35503900acd6b37d70텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)