MATLAB 태그가 달린 최신 소식을 게시하는 Twitter bot (Powered by ThingSpeak)
15246 단어 트위터QiitaAPIThingspeakmatlab
했던 일
MATLAB의 최신 기사 없는가~와 Qiita를 체크하는 횟수를 줄이기 위해서, MATLAB 태그가 붙은 기사를 자동으로 알려주는 bot 를 만들었으므로 코드 공개합니다.
계정은 여기 -> @Qiita_MATLAB
이 게시물의 포인트
시간대를 가미한 처리가 편한 datetime
형 변수의 TimeZone
속성이 볼거리입니다.
간단한 예라면,
t1 = datetime();
t1.TimeZone = 'Asia/Shanghai'
t2 = t1;
t2.TimeZone = 'Europe/London'
그리고 실행하면
t1 =
datetime
2019/10/26 07:00:14
t2 =
datetime
2019/10/26 00:00:14
라고 표시는 다릅니다만, 이하와 같이 시간 정보로서는 동치입니다.
>> isequal(t1,t2)
ans =
logical
1
관련 기사, 페이지
ThingSpeak 자체나, Twitter에서 중얼거리는데 필요한 설정이나 코드는 이하에서 소개하고 있으므로, 좋으면 참고로 해 주세요.
Qiita: ThingSpeak x MATLAB에서 Twitter bot 구현
실제 Channel은 여기에서 확인할 수 있습니다만, 일단 이하의 2개의 정보도 트랙하고 있습니다.
t1 = datetime();
t1.TimeZone = 'Asia/Shanghai'
t2 = t1;
t2.TimeZone = 'Europe/London'
t1 =
datetime
2019/10/26 07:00:14
t2 =
datetime
2019/10/26 00:00:14
>> isequal(t1,t2)
ans =
logical
1
total_items: MATLAB 태그가 있는 총 기사 수
total_followers: MATLAB 태그의 팔로워 수
주요 MATLAB Analysis
코드 전문은 마지막으로 정리해 재게재하므로, 여기서는 요소만 해설합니다. ThingSpeak의 Time Control 설정에 따라 한 시간에 한 번 실행됩니다.
하는 구조로 하고 있습니다.
먼저 Qiita API를 사용하여 최신 20개의 목록을 만듭니다.
% ここから新着記事のチェック(最新20個取ればOKでしょう・・)
url = "https://qiita.com/api/v2/tags/matlab/items?page=1&per_page=20";
tmp = webread(url,opts);
% 投稿時刻をチェック(TimeZone は日本時間に設定)
created_at = datetime(vertcat(tmp.created_at),...
'InputFormat', "uuuu-MM-dd'T'HH:mm:ss'+09:00",'TimeZone','Asia/Tokyo');
titles = string({tmp.title}');
urls = string({tmp.url}');
item_list = timetable(titles, urls, 'RowTimes', created_at,...
'VariableNames',{'titles', 'urls'})
이 때, 시간 정보는
TimeZone
, Asia/Tokyo
로 설정해 timetable
형 변수: item_list
로서 정리합니다.현 시각으로부터 1시간 이내에 투고되고 있으면 그것은 신착 기사. 현시각으로부터 과거 1시간의 사이에 투고된 것만을,
item_list
로부터 꺼냅니다.% 新着かどうかのチェック
% このスクリプトは 1時間に1回実行する設定にします。(ThingSpeak の Time Control 設定)
interval = duration(1,0,0);
tnow = datetime;
% ThingSpeak が動いているところでは TimeZone が UTC であるところに注意
tnow.TimeZone = 'UTC';
trange = timerange(tnow-interval,tnow) % 過去一時間以内の投稿だけを抽出
newitem_list = item_list(trange,:);
trange
변수에 대한 시간 정보는 TimeZone
, UTC
로 설정됩니다.요약
ThingSpeak을 사용하여 @Qiita_MATLAB bot를 만들었습니다.
ThingSpeak의 시간 설정은 UTC
입니다.
MATLAB 태그가 붙은 게시 빈도는 아직 높지 않기 때문에, bot로서는 조금 외롭네요. . 이런 것을 중얼거리면? 등 제안 있으면 뭐라고.
MATLAB 코드 전문
각 APIKey만 설정하면 그대로 기능할 것이다.
% アクセストークン使用
% accessToken = 'Bearer xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';
% opts = weboptions('HeaderFields',{'Authorization',accessToken});
% アクセストークン使用しない場合
opts = weboptions;
% ThingSpeak ログ用:記事合計数、フォロワー数の取得
url = "https://qiita.com/api/v2/tags/matlab";
tmp = webread(url,opts);
items_count = tmp.items_count;
followers_count = tmp.followers_count;
channelID = 890134;
writeAPIKey = 'XXXXXXXXXXXXXXXX'; % それぞれの Channel に固有の APIKey
readAPIKey = 'XXXXXXXXXXXXXXXX'; % それぞれの Channel に固有の APIKey
% Fields:
% 1: total_items
% 2: total_followers
% Channel に情報送信
data = {items_count, followers_count};
thingSpeakWrite(channelID, data , 'WriteKey', writeAPIKey);
% ここから新着記事のチェック(最新20個取ればOKでしょう・・)
url = "https://qiita.com/api/v2/tags/matlab/items?page=1&per_page=20";
tmp = webread(url,opts);
% 投稿時刻をチェック(TimeZone は日本時間に設定)
created_at = datetime(vertcat(tmp.created_at),...
'InputFormat', "uuuu-MM-dd'T'HH:mm:ss'+09:00",'TimeZone','Asia/Tokyo');
titles = string({tmp.title}');
urls = string({tmp.url}');
item_list = timetable(titles, urls, 'RowTimes', created_at,...
'VariableNames',{'titles', 'urls'})
% 新着かどうかのチェック
% このスクリプトは 1時間に1回実行する設定にします。(ThingSpeak の Time Control 設定)
% なので、、現時刻から1時間以内に投稿されていればそれは新着記事とします。
interval = duration(1,0,0);
tnow = datetime;
% ThingSpeak が動いているところでは TimeZone が UTC であるところに注意
tnow.TimeZone = 'UTC';
trange = timerange(tnow-interval,tnow) % 過去一時間以内の投稿だけを抽出
newitem_list = item_list(trange,:);
% ThingTweet 設定
tturl='https://api.thingspeak.com/apps/thingtweet/1/statuses/update';
api_key = 'XXXXXXXXXXXXXX'; % Twitterをリンクして APIKey を取得してください。
options = weboptions('MediaType','application/x-www-form-urlencoded');
options.Timeout = 10;
tweetFlag = true;
% 新着の数だけ呟きます(無ければ呟かない)
for ii=1:height(newitem_list)
% 投稿文
status = "#Qiita #MATLAB" + newline;
status = status + newitem_list.titles(ii);
status = status + newitem_list.urls(ii);
disp(status);
if tweetFlag
try
webwrite(tturl, 'api_key', api_key, 'status', status, options);
catch ME
disp(ME)
end
end
end
Reference
이 문제에 관하여(MATLAB 태그가 달린 최신 소식을 게시하는 Twitter bot (Powered by ThingSpeak)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/eigs/items/412cd57f0cf5aa5ac5ae
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
각 APIKey만 설정하면 그대로 기능할 것이다.
% アクセストークン使用
% accessToken = 'Bearer xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';
% opts = weboptions('HeaderFields',{'Authorization',accessToken});
% アクセストークン使用しない場合
opts = weboptions;
% ThingSpeak ログ用:記事合計数、フォロワー数の取得
url = "https://qiita.com/api/v2/tags/matlab";
tmp = webread(url,opts);
items_count = tmp.items_count;
followers_count = tmp.followers_count;
channelID = 890134;
writeAPIKey = 'XXXXXXXXXXXXXXXX'; % それぞれの Channel に固有の APIKey
readAPIKey = 'XXXXXXXXXXXXXXXX'; % それぞれの Channel に固有の APIKey
% Fields:
% 1: total_items
% 2: total_followers
% Channel に情報送信
data = {items_count, followers_count};
thingSpeakWrite(channelID, data , 'WriteKey', writeAPIKey);
% ここから新着記事のチェック(最新20個取ればOKでしょう・・)
url = "https://qiita.com/api/v2/tags/matlab/items?page=1&per_page=20";
tmp = webread(url,opts);
% 投稿時刻をチェック(TimeZone は日本時間に設定)
created_at = datetime(vertcat(tmp.created_at),...
'InputFormat', "uuuu-MM-dd'T'HH:mm:ss'+09:00",'TimeZone','Asia/Tokyo');
titles = string({tmp.title}');
urls = string({tmp.url}');
item_list = timetable(titles, urls, 'RowTimes', created_at,...
'VariableNames',{'titles', 'urls'})
% 新着かどうかのチェック
% このスクリプトは 1時間に1回実行する設定にします。(ThingSpeak の Time Control 設定)
% なので、、現時刻から1時間以内に投稿されていればそれは新着記事とします。
interval = duration(1,0,0);
tnow = datetime;
% ThingSpeak が動いているところでは TimeZone が UTC であるところに注意
tnow.TimeZone = 'UTC';
trange = timerange(tnow-interval,tnow) % 過去一時間以内の投稿だけを抽出
newitem_list = item_list(trange,:);
% ThingTweet 設定
tturl='https://api.thingspeak.com/apps/thingtweet/1/statuses/update';
api_key = 'XXXXXXXXXXXXXX'; % Twitterをリンクして APIKey を取得してください。
options = weboptions('MediaType','application/x-www-form-urlencoded');
options.Timeout = 10;
tweetFlag = true;
% 新着の数だけ呟きます(無ければ呟かない)
for ii=1:height(newitem_list)
% 投稿文
status = "#Qiita #MATLAB" + newline;
status = status + newitem_list.titles(ii);
status = status + newitem_list.urls(ii);
disp(status);
if tweetFlag
try
webwrite(tturl, 'api_key', api_key, 'status', status, options);
catch ME
disp(ME)
end
end
end
Reference
이 문제에 관하여(MATLAB 태그가 달린 최신 소식을 게시하는 Twitter bot (Powered by ThingSpeak)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/eigs/items/412cd57f0cf5aa5ac5ae텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)