Mastodon을 Node.js에서 즐겨보세요
Mastodon
왠지 화제가 되고 있는 Twitter 같은 서비스.
어제(2017-4-12) 근처부터 갑자기 화제가 되기 시작하고 있어, 자신도 조금 신경이 쓰였으므로 파오. 뿌리 t 과 mstd 응. jp 에 계정을 작성했습니다.
또한 라이브러리도 풍부하고 Ruby/Python/JavaScript/Node.js/Elixir 버전이 공식 문서에 연결되어 있습니다.
Python으로 시도한 사람 가 이미 계셨기 때문에, 자신은 Node.js 로 Toot 할 때까지 해 보았습니다.
환경
macOS Sierra 10.12.4
Node.js v7.9.0
해보자
트윗하기 전에,
macOS Sierra 10.12.4
Node.js v7.9.0
해보자
트윗하기 전에,
client_id
및 client_secret
얻기 라는 흐름을 밟습니다.
하지만, 1~3 에 대해서는 Mastodon API Client Library - GitHub 의 example 로 일발이므로, 실질 2 스텝입니다.
액세스 토큰 얻기
먼저 위의 라이브러리
npm install --save mastodon-api
에서 설치.
이 안에 있는 authorization.js 을 조금 만져 사용합니다. 디폴트라고 mastodon.social 에 향합니다만, .social 는 사람이 너무 많아 신규 등록을 정지하고 있어 게다가 .jp 는 여러 사정( 후술 )으로 잘 되지 않았기 때문에 .io 로부터 토큰 를 얻고 있습니다.
auth.js
const readline = require('readline')
const Mastodon = require('./node_modules/mastodon-api/lib/mastodon.js')
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
})
let clientId
let clientSecret
const baseUrl = 'https://mstdn.io'
Mastodon.createOAuthApp(baseUrl + '/api/v1/apps', 'testapp', 'read write follow')
.catch(err => console.error(err))
.then((res) => {
console.log('Please save \'id\', \'client_id\' and \'client_secret\' in your program and use it from now on!')
console.log(res)
clientId = res.client_id
clientSecret = res.client_secret
return Mastodon.getAuthorizationUrl(clientId, clientSecret, baseUrl)
})
.then(url => {
console.log('This is the authorization URL. Open it in your browser and authorize with your account!')
console.log(url)
return new Promise((resolve) => {
rl.question('Please enter the code from the website: ', code => {
resolve(code)
rl.close()
})
})
})
.then(code => Mastodon.getAccessToken(clientId, clientSecret, code, baseUrl))
.catch(err => console.error(err))
.then(accessToken => {
console.log(`This is the access token. Save it!\n${accessToken}`)
})
실행하면,
This is the authorization URL. Open it in your browser and authorize with your account!
https://mstdn.io/oauth/authorize?redirect_uri=(略)
Please enter the code from the website:
와 나오므로 액세스합니다.
이 화면의 "AUTHORIZE"를 누르면 문자열이 나오므로 콘솔에 입력하면 액세스 토큰을 얻을 수 있습니다.
Toot 하기 전에 타임라인을 가져오기
node-mastodon 을
npm install --save mastodon
로 설치.timeline.js
var Masto = require('mastodon')
var M = new Masto({
access_token: 'とーくん',
timeout_ms: 60 * 1000,
api_url: 'https://mstdn.io/api/v1/',
})
M.get('timelines/public', function(err, data, res) {
if(!err)
for (key in data)
console.log(data[key].content.replace(/<("[^"]*"|'[^']*'|[^'">])*>/g, ''))
})
모두의 투트가 벨로벨로 나옵니다.
덧붙여서 트트 본문은 전체가 p태그로 둘러싸여 있어 내용도 HTML 태그가 다채롭습니다. 조금 사용하기 어려울지도.
Toot 시도
toot.js
var Masto = require('mastodon')
var M = new Masto({
access_token: 'とーくん',
timeout_ms: 60 * 1000,
api_url: 'https://mstdn.io/api/v1/',
})
M.post('statuses', {status: 'Test from myapp'}, function (err, data, res) {
if (!err)
console.log(res)
})
할 수 있었습니다.
막힌 곳
인증을 .jp 로 하려고 했습니다만, 이하의 에러를 토해서 할 수 없었습니다.
{ Error: Hostname/IP doesn't match certificate's altnames: "Host: mastodon.jp. is not in the cert's altnames: DNS:*.gmoserver.jp, DNS:gmoserver.jp"
at Object.checkServerIdentity (tls.js:199:17)
at TLSSocket.<anonymous> (_tls_wrap.js:1094:29)
at emitNone (events.js:86:13)
at TLSSocket.emit (events.js:188:7)
at TLSSocket._finishInit (_tls_wrap.js:610:8)
at TLSWrap.ssl.onhandshakedone (_tls_wrap.js:440:38)
reason: 'Host: mastodon.jp. is not in the cert\'s altnames: DNS:*.gmoserver.jp, DNS:gmoserver.jp',
host: 'mastodon.jp',
분명히 요청하는 도메인과 인증서의 도메인이 다른 경우 토해지는 오류 인 것 같습니다. 증명서 체크를 무시하면 통과하는 것 같습니다만, 과연 무서워서 할 수 없어.
라고 할까 .jp 라고 이름.com 사용하고 있군요.
[2017-4-14 추가]
도메인 이름을 착각했습니다 ......! 죄송합니다.
올바른 도메인은 mstdn.jp입니다. 인증이 통과하는 것도 확인했습니다.
여러 뉴스 사이트에서 화제가 된 탓에 유저가 대량으로 유입하고 있는 것 같고, 메일 서버도 펑크 직전(오늘(2017-4-13)의 16시경 등록했습니다만, 등록 확인 메일이 도착한다 까지 40분 걸렸습니다) 같기 때문에, 좀처럼 개인 레벨에서 인스턴스를 가지는 것은 힘들 것 같습니다.
그렇다고는 해도 재미있는 서비스라고 생각하기 때문에, 앞으로 점점 발전해 주었으면 합니다.
(혼자 행성처럼 되지는 않아……)
[2017-4-19 추가]
사쿠라 클라우드로 이전하여 바삭 바삭하게되었습니다! 앞으로가 기대됩니다.
Reference
이 문제에 관하여(Mastodon을 Node.js에서 즐겨보세요), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/albno273/items/eb109820125faf7638cd텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)