Skip to content

Instantly share code, notes, and snippets.

@junjanjon
Last active March 31, 2024 04:58
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save junjanjon/8ce62c1cb90e817b1247de672bf93116 to your computer and use it in GitHub Desktop.
Save junjanjon/8ce62c1cb90e817b1247de672bf93116 to your computer and use it in GitHub Desktop.
コンソールを使って指定のチャットワーク部屋のメッセージをすべて取得する。
// 取得したいチャットルームの最新のチャット ID
var target_chat_id = 1274532567885807616;
// 取得したいチャットルームのルーム ID
var target_room_id = 12345678;
// 最大再帰回数. 本番時は 10000 程度を指定してください.
var LIMIT_COUNT = 3;
// 通信間隔[ミリ秒].
var INTERVAL_TIME = 100;
var message_logs = []
function log(room_id, first_chat_id, count, callback)
{
if (count <= 0)
{
callback();
return;
}
var token = ACCESS_TOKEN;
var myid = MYID;
var url = `https://kcw.kddi.ne.jp/gateway/load_old_chat.php?myid=${myid}&_v=1.80a&_av=5&ln=ja&room_id=${room_id}&first_chat_id=${first_chat_id}`;
var request = new XMLHttpRequest();
request.open('POST', url);
request.onreadystatechange = function (){
if (request.readyState != 4) {
// リクエスト中
} else if (request.status != 200) {
// 失敗
} else {
var text = request.responseText;
var json = JSON.parse(text);
console.log(count);
var chat_list = json["result"]["chat_list"];
console.log(chat_list);
if (chat_list.length == 0)
{
callback();
return;
}
var chat_messages = chat_list.map(item => item["msg"]).filter(item => item != null);
chat_messages.forEach(item => {
message_logs.push(item)
});
var last_chat_id = (chat_list[chat_list.length - 1]["id"]);
setTimeout(() =>
{
log(room_id, last_chat_id, count - 1, callback);
}, INTERVAL_TIME);
}
};
var formData = new FormData();
formData.append("pdata", '{"_t":"' + token + '"}');
request.send(formData);
}
var callback = function()
{
var all_message =message_logs.join("\n");
console.log(all_message);
};
log(target_room_id, target_chat_id, LIMIT_COUNT, callback);
// 取得したいチャットルームの最新のチャット ID より大きい値.
var target_chat_id = 1356787875781279744;
// 取得したいチャットルームのルーム ID
var target_room_id = 12345678;
// 最大再帰回数. 本番時は 10000 程度を指定してください.
var LIMIT_COUNT = 3;
// 通信間隔[ミリ秒].
var INTERVAL_TIME = 100;
// チャットワークのホスト. 個人用の場合 "www.chatwork.com" を指定してください.
var HOST_URL = "kcw.kddi.ne.jp"
var message_logs = []
function log(room_id, first_chat_id, count, callback)
{
if (count <= 0)
{
callback();
return;
}
var token = ACCESS_TOKEN;
var myid = MYID;
var url = `https://${HOST_URL}/gateway/load_old_chat.php?myid=${myid}&_v=1.80a&_av=5&ln=ja&room_id=${room_id}&first_chat_id=${first_chat_id}`;
var request = new XMLHttpRequest();
request.open('POST', url);
request.onreadystatechange = function (){
if (request.readyState != 4) {
// リクエスト中
} else if (request.status != 200) {
// 失敗
} else {
var text = request.responseText;
var json = JSON.parse(text);
console.log(count);
var chat_list = json["result"]["chat_list"];
console.log(chat_list);
if (chat_list.length == 0)
{
callback();
return;
}
var chat_messages = chat_list.filter(item => item["msg"] != null);
chat_messages.forEach(item => {
message_logs.push(item)
});
var last_chat_id = (chat_list[chat_list.length - 1]["id"]);
setTimeout(() =>
{
log(room_id, last_chat_id, count - 1, callback);
}, INTERVAL_TIME);
}
};
var formData = new FormData();
formData.append("pdata", '{"_t":"' + token + '"}');
request.send(formData);
}
var callback = function()
{
message_logs.sort((a, b) => {
return Number(a["id"]) - Number(b["id"]);
});
var all_message = JSON.stringify(message_logs);
console.log(all_message);
};
log(target_room_id, target_chat_id, LIMIT_COUNT, callback);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment