インストールしたTT-RSSではAPIを利用できるようです。
参考にしたページは下記。
APIリファレンス
HTMLとJavaScriptの勉強がてら、(1)ログインして、(2)フィード一覧を取得して、(3)コンテンツ一覧を取得する といった流れを作成してみます。
出来たのがこちら。実用性は全く無いですが、備忘のためにメモメモ。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>TT-RSS API Test</title>
<style>
.accordion {text-align: left;}
.accordion .inner {display: none;}
.accordion p{cursor: pointer; padding: 10px;}
.feedList {float: left;}
.feedInfo {float: left;}
</style>
<!-- jQuery -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<script type="text/javascript">
$(function(){
var API_URL = './tt-rss/api/'; // APIの場所
var DATA_TYPE = 'json'; // データの形式
var ttrss_sid = "";
// loginボタンがクリックされたら
$('button#login').click(function(){
var data = {
op: "login",
user: $("#userid").val(),
password: $("#password").val()
}
$.ajax(
{
url:API_URL,
type:'post',
dataType: DATA_TYPE,
data: JSON.stringify(data),
contetType: 'application/json'
})
// Ajaxリクエストが成功したら
.done( (data) => {
ttrss_sid = data.content.session_id;
// session_id が取得できたらログインフォームを隠す
if(ttrss_sid){
$('#first').hide();
getFeedView(ttrss_sid);
}else{
$('.feedList').text(data.content.error);
};
})
// Ajaxリクエストが失敗したら
.fail( (data) => {
$('.feedList').html('server error');
})
// Ajaxリクエストが成功・失敗どちらでも
.always( (data) => {
console.log(data);
});
});
// ログインした後に呼ばれる
function getFeedView(data){
$('.feedList').text("ログイン成功!データ取得中・・・");
var data = {
sid: ttrss_sid,
op: "getFeedTree"
}
$.ajax(
{
url:API_URL,
type:'post',
dataType: DATA_TYPE,
data: JSON.stringify(data),
contetType: 'application/json'
})
.done( (data) => {
console.log(data);
var catList = "";
// 取得したリスト分だけ繰り返し
for( var i=0; i<data.content.categories.items.length; i++){
var feedList = "";
catList = catList + "<ul class='accordion'><p class='"+ data.content.categories.items[i].bare_id + "'>" + data.content.categories.items[i].name + "</p>";
// こっちは総数が直接分からないのでeachで繰り返し
$.each(data.content.categories.items[i].items,function (index,val){
if(index == 0){feedList = "<ul class='inner'>";}
feedList = feedList + "<li id='" + val.bare_id + "'>'" + index + ":" + val.name + "</li>";
});
catList = catList + feedList + "</ul></ul>";
}
$('.feedList').html(catList);
});
}
//.accordionの中のp要素がクリックされたら
// 動的に生成しているHTMLなので、$(document)を使う
$(document).on("click",".accordion p", function(){
//クリックされた.accordionの中のp要素に隣接するul要素を開いたり閉じたりする。
$(this).next('ul').slideToggle();
});
//.innerの中のli要素がクリックされたら
$(document).on("click",".inner li", function(){
console.log($(this).attr('id'));
var fid = $(this).attr('id');
var data = {
sid: ttrss_sid,
op: "getHeadlines",
feed_id: fid // 他にも引数はあるみたいだけど省略・・・
}
$.ajax(
{
url:API_URL,
type:'post',
dataType: DATA_TYPE,
data: JSON.stringify(data),
contetType: 'application/json'
})
.done( (data) => {
var feed_title = "";
var feed_link = "";
var title = "";
var feed_html = "<p>" + data.content[0].feed_title + "</p><ul>";
// 取得したリスト分だけ繰り返し
for( var i=0; i<data.content.length; i++){
feed_link = data.content[i].link;
title = data.content[i].title;
feed_html = feed_html + "<li><a href='" + feed_link + "' target='new'>" + title + "</li>";
}
feed_html = feed_html + "</ul>";
$('.feedInfo').html(feed_html);
console.log(data);
});
});
//feedInfoの中のa要素がクリックされたら
$(document).on("click",".feedInfo a", function(){
console.log($(this).attr(''));
// 外部サイトをページ内に埋め込むのは難しそうなので延期
// $.ajax(
// {
// url: $(this).attr('id'),
// timeout : 1000, // 1000 ms
// datatype:'html'
// })
// .done( (data) => {
// var out_html = $($.parseHTML(data));//parse
// $('contents').html(out_html);
// });
});
});
</script>
</head>
<body>
<div id="first">
<form id="form" method="post" accept-charset="utf-8" return false>
<p>id <input type="text" name = "userid" id ="userid"> </p>
<p>pw <input type="password" name = "password" id="password"> </p>
</form>
<button id="login">login</button>
</div>
<div class="feedList"></div>
<div class="feedInfo"></div>
</body>
</html>

コメント