正直、今更感はありますが… C# を用いて、XMLファイル を読み込んで オブジェクト を生成する デシリアライズ と、 オブジェクト を XMLファイル へ書き込む シリアライズ を行うサンプルコード を覚書きしておきます。
目次
正直、今更感はありますが… C# を用いて、XMLファイル を読み込んで オブジェクト を生成する デシリアライズ と、 オブジェクト を XMLファイル へ書き込む シリアライズ を行うサンプルコード を覚書きしておきます。
目次
守る資産、脆弱性、脅威の3つが揃ったとき、そこにセキュリティリスクが発生します。 ここでは、脆弱性を減らすことで、セキュリティリスクの低減を図る方法を示します。 具体的にここでは、JavaScript の サニタイジング を行うことで XSS(クロスサイトスクリプティング) を防ぐ方法をみていきます。
目次
ASP.NET で開発をしていると、 web.config に machineKey を設定できます。 複数のサーバーにおいて、同じ認証結果を利用したい場合(DNSラウンドロビン等)、各サーバーにおいて共通の machineKey を設定することで、1度の認証で他のサーバーにアクセスできるようなことを実現できます。 この machineKey 、生成方法は MSDN に記載があるのですが、わざわざ作らないと machineKey を手に入れることができません。
…というわけで、machineKey を生成するツールを作ってみました。 暗号化/複合化および検証に対して任意の強度を選択して生成するだけの単純なものです。
ソースコード
バイナリ
"技術的にできる" という実践例として MVC 4 + WebAPI という組み合わせで、 RESTful like なフォーム認証を作る方法を記載します。 MVC だけで実装する フォーム認証 と比べ、実装量が増える デメリット がありますが、操作感が良くなる(リクエスト時に固まるをなくせる)メリットはあると思います。
目次
<namespace> |
util
Jasmineで利用する ユーテリティ 関数、クラスを保持します。
|
---|---|
<namespace> |
Clock
Jasmineで利用するタイマーに関する関数、クラスを保持します。
|
<private> |
undefined : undefined
undefined は他の場所で上書きされている場合があるため、必ずundefined の代わりに jasmine.undefined を利用してください。
|
---|---|
<private> |
VERBOSE : boolean
このプロパティが true に設定されている場合、診断メッセージをコンソールへ出力します。
|
<private> |
DEFAULT_UPDATE_INTERVAL : number
イベントループを実行するデフォルト インターバル ミリ秒
(ネットワークアクティビティ を許可したり、HTMLベースのランナーをで画面をリフレッシュする場合など)。
小さな値を設定するとテスト実行が遅くなることがあります。
0 は更新されないことを意味します。
|
<private> |
DEFAULT_TIMEOUT_INTERVAL : number
waitsFor() ブロックで、タイムアウト する デフォルトインターバル ミリ秒。
|
<private> |
version_ : object
|
<private> |
unimplementedMethod_ : void
|
---|---|
<public> |
グローバル オブジェクト を取得します。
|
<public> |
指定された遅延の後に、コードの断片または関数を実行します。
|
<public> |
setTimeout によって設定された遅延を解除します。 |
<public> |
一定の遅延間隔を置いて関数を繰り返し呼び出します。
|
<public> |
setInterval によって設定された繰り返し処理を解除します。 |
<public> |
jasmine.Env インスタンス を取得します。 |
<public> |
結果表示用に文字列整形します。
|
<private> |
指定された オブジェクト が配列かどうかを返します。
|
<private> |
指定された オブジェクト が文字列かどうかを返します。
|
<private> |
指定された オブジェクト が数値かどうかを返します。
|
<private> |
指定された オブジェクト が 指定された 型 かどうかを返します。
|
<public> |
引数が DOM要素 の場合、 true を返します。
|
<public> |
マッチ可能なクラス型の "一般"オブジェクト を返します。
|
<public> |
マッチ可能な JSONオブジェクト の サブセット を返します。
|
<public> |
Spy オブジェクト を生成します。
|
<public> |
オブジェクトが jasmine.Spy オブジェクト かどうか判定します。
|
<public> |
より複雑な Spy オブジェクト を生成します。
|
<public> |
全パラメターの文字列整形が終わった後、現在のスペックを書き出します。
|
<public> |
MessageResult
|
---|---|
<public> |
ExpectationResult
|
<public> |
XmlHttpRequest
|
<public> |
スタブ、スパイ、フェイク、またはモックとして動作するテストの代役クラス。
|
<public> |
Env
|
<public> |
Reporter
|
<public> |
Block
|
<public> |
JsApiReporter
|
<public> |
マッチャーに関する関数、オブジェクト。
|
<public> |
FakeTimer
|
<public> |
MultiReporter
|
<public> |
NestedResults
|
<public> |
PrettyPrinter
|
<public> |
StringPrettyPrinter
|
<public> |
Queue
|
<public> |
Runner
|
<public> |
Spec
|
<public> |
Suite
|
<public> |
WaitsBlock
|
<public> |
WaitsForBlock
|
getGlobal メソッド
グローバル オブジェクト を取得します。
public {void} getGlobal ( )
setTimeout メソッド
指定された遅延の後に、コードの断片または関数を実行します。
public {number} setTimeout ( {function} code, {number} delay )
clearTimeout メソッド
setTimeout
によって設定された遅延を解除します。
public {void} clearTimeout ( {number} timerId )
setInterval メソッド
一定の遅延間隔を置いて関数を繰り返し呼び出します。
public {number} setTimeout ( {function} code, {number} delay )
clearInterval メソッド
setInterval
によって設定された繰り返し処理を解除します。
public {void} clearInterval ( {number} timerId )
getEnv メソッド
jasmine.Env
インスタンス を取得します。
public {jasmine.Env} getEnv ( )
pp メソッド
結果表示用に文字列整形します。
あらゆる オブジェクト を引数にとり、読みやすい文字列に整形して返します。
public {string} pp ( {object} value )
isArray_ メソッド
指定された オブジェクト が配列かどうかを返します。
public {boolean} isArray_ ( {object} value )
isString_ メソッド
指定された オブジェクト が文字列かどうかを返します。
public {boolean} isString_ ( {object} value )
isNumber_ メソッド
指定された オブジェクト が数値かどうかを返します。
public {boolean} isNumber_ ( {object} value )
isA_ メソッド
指定された オブジェクト が 指定された 型 かどうかを返します。
public {boolean} isA_ ( {string} typeName, {object} value )
isDomNode メソッド
引数が DOM要素 の場合、 true を返します。
public {bolean} isDomNode ( {object} obj )
any メソッド
マッチ可能なクラス型の "一般"オブジェクト を返します。 値を気にしない型の判定で使います。
public {jasmine.Matchers.Any} any ( {function} clazz )
jasmine.Matchers.Any
オブジェクト。// 関数が呼び出されたことだけを調査し、その他は無視します。 expect(mySpy).toHaveBeenCalledWith(jasmine.any(Function));
objectContaining メソッド
マッチ可能な JSONオブジェクト の サブセット を返します。 オブジェクトの全属性を気にしない判定で使います。
public {jasmine.Matchers.ObjectContaining} objectContaining ( {object} sample )
jasmine.Matchers.ObjectContaining
オブジェクト。// オブジェクト プロパティ "foo" のみを調べて、他は無視します。 expect(mySpy).toHaveBeenCalledWith(jasmine.objectContaining({foo: "bar"});
createSpy メソッド
Spy オブジェクト を生成します。
public {jasmine.Sply} createSpy ( {string} name )
isSpy メソッド
オブジェクトが jasmine.Spy オブジェクト かどうか判定します。
public {boolean} isSpy ( {object} putativeSpy )
createSpyObj メソッド
より複雑な Spy オブジェクト を生成します。
すべての プロパティ が Spyオブジェクト で成り立つ オブジェクト を生成します。
大きな スタブ を生成したい場合に利用します。
baseName + methodName の Spy オブジェクト を大量生成します。
public {object} createSpyObj ( {string} baseName, {string[]} methodNames )
log メソッド
全パラメターの文字列整形が終わった後、現在のスペックを書き出します。
jasmine.log
は製品コード中で利用しないでください。
public {void} log ( )
URLに含まれる クエリストリング (クエリ文字列、クエリパラメータ) を取得し、使いやすい形に分解、整形する サンプルコード を掲載します。 単純な クエリストリング を分解する コード はよく見かけるので、もう少しがんばって 配列 や ハッシュ(連想配列) に対応したものを実装してみました。
目次
関連記事
ASP.NET MVC における、フォーム認証の実装例を掲載します。 今回は ASP.NET MVC 4 で実装しています…が、 ASP.NET MVC 3 でも似たような実装になるかと思います。
目次
ASP.NET Web API における、ルーティング についてまとめます。 WCF と似ているけれど、バインド方法が若干異なるので、注意が必要そうです。
目次
リクエスト時 に設定する クエリパラメーター、 メッセージボディー と、リクエストを受け取った関数の引数 がどのような関係にあるかをまとめます。 具体的には、クエリーパラメーター を 引数 へ バインド する方法と、メッセージボディー から モデルクラス へ バインド する方法 についてのまとめです。
目次
データコントラクト(DataContract)を利用することで、JSON と C# で作成した クラス との間の シリアライズ、デシリアライズ を自動的に行えるようにします。 ここでは、メッセージボディー に入れられた JSONオブジェクト を C# で作成した モデルクラス へ バインド する方法について記載します。
目次
Web API を利用していると、簡単に レスポンスヘッダー を調整することができます。
ほとんどは HttpResponseMessage クラス
の設定で処理を行います。
以下に、ケース別の具体例を掲載します。
目次
何も設定しない場合、application/json
になるので、ここでは text/plain
に設定する例を掲載します。
namespace WebService { using System.Text; using System.Web; using System.Web.Http; public class SampleController : ApiController { public string Get() { var response = this.Request.CreateResponse(HttpStatusCode.OK); response.Content = new StringContent("Hello World.", Encoding.UTF8, "text/plain"); return response; } } }
namespace WebService { using System.Web; using System.Web.Http; public HttpResponseMessage Post() { try { // 何か処理 return this.Request.CreateResponse(HttpStatusCode.OK); } catch { return this.Request.CreateErrorResponse(HttpStatusCode.InternalServerError, "エラーメッセージ"); } } }
namespace WebService { using System.Web; using System.Web.Http; public class SampleController : ApiController { public HttpResponseMessage Options() { var response = this.Request.CreateResponse(HttpStatusCode.OK); response.Headers.Add("Access-Control-Allow-Origin", "*"); response.Headers.Add("Access-Control-Allow-Methods", "GET, POST, OPTIONS"); response.Headers.Add("Access-Control-Max-Age", "1728000"); return response; } } }
今回、以下のサイトを参考にしました。
ここでは、 ASP.NET Web API において、独自フィルター を実装する方法を掲載します。 独自フィルター を実装することで、 RESTful アプリケーション内において、ある決まった処理を簡単に実装することができるようになります。 今回は サンプル として「フィルターを実装したアクション(メソッド)のレスポンスをキャッシュさせない」独自フィルターを作成します。
ASP.NET Web API の入門。 ASP.NET Web API を利用して RESTful web サービス を作成します。 ここでは、何も装飾的な処理を考えない、最も基本的な サービス の作成を目指します。
クロスドメイン制約 を 回避 する クライアント & サーバー 実装 を XmlHttpRequest level2 の プリフライト を利用して実現します。
クロスドメイン通信 を実現するには "サーバー側" と "クライアント側" の2カ所に対して手を入れる必要があるかどうか考えます。 ここでは、"クライアント側" と "サーバー側" 両方に手を加えて クロスドメイン通信 を実現する方法を載せます。 具体的には、XmlHttpRequest level2 の プリフライト を利用して クロスドメイン通信 を行えるようにします。
「文字列 で記載された 関数 を 実行 する」方法は eval
を使いますが、
ここではその逆「関数 を 文字列化 する 方法」を記載します。
サンプルコード(関数 → 文字列)
var actFunc, strFunc; // 関数の実態 actFunc = function (a, b) { return a * b; }; // 関数の文字列化 strFunc = '' + actFunc; // 試しに表示してみる... window.alert(strFunc);
クロスドメイン制約 を 回避 する クライアント実装 を document.domain を利用して実現します。
クロスドメイン通信 を実現するには "サーバー側" と "クライアント側" の2カ所に対して手を入れる必要があるかどうか考えます。 ここでは、"クライアント側" に手を加えて クロスドメイン通信 を実現する方法を載せます。 具体的には、document.domain を変更することで信頼する範囲を広げて クロスドメイン通信 を行えるようにします。
Blogger に Pocket の "pocket" ボタン を 設置、追加する方法を記載します。 各ページ (投稿) に対する ボタン です。 ここに載せる コード は ブログ テンプレート に対してコピペ で使えるようにしてあります。 表示したい位置へ コピー & ペースト して利用してください。 作業手順手としては次の通りです。
※その他の ソーシャルボタン もまとめて追加する方法は こちら。
※ソースコード は ダブルクリック すると、全選択できます。
Blogger に はてなブックマーク の "B!" ボタン を 設置、追加する方法を記載します。 各ページ (投稿) に対する ボタン です。 ここに載せる コード は ブログ テンプレート に対してコピペ で使えるようにしてあります。 表示したい位置へ コピー & ペースト して利用してください。 作業手順手としては次の通りです。
※その他の ソーシャルボタン もまとめて追加する方法は こちら。
※ソースコード は ダブルクリック すると、全選択できます。
Blogger に google の "+1" ボタン を 設置、追加する方法を記載します。 各ページ (投稿) に対する ボタン です。 ここに載せる コード は ブログ テンプレート に対してコピペ で使えるようにしてあります。 表示したい位置へ コピー & ペースト して利用してください。 作業手順手としては次の通りです。
※その他の ソーシャルボタン もまとめて追加する方法は こちら。
※ソースコード は ダブルクリック すると、全選択できます。
Blogger に facebook の "いいね" ボタン を 設置、追加する方法を記載します。 各ページ (投稿) に対する いいね ボタン です。 ここに載せる コード は ブログ テンプレート に対してコピペ で使えるようにしてあります。 表示したい位置へ コピー & ペースト して利用してください。 作業手順手としては次の通りです。
※その他の ソーシャルボタン もまとめて追加する方法は こちら。
※ソースコード は ダブルクリック すると、全選択できます。
Blogger に twitter の "ツイート" ボタン を 設置、追加する方法を記載します。 各ページ (投稿) に対する ツイート ボタン です。 ここに載せる コード は ブログ テンプレート に対してコピペ で使えるようにしてあります。 表示したい位置へ コピー & ペースト して利用してください。 作業手順手としては次の通りです。
その他の ソーシャルボタン もまとめて追加する方法は こちら。
Blogger に twitter の 「ツイート」、facebook の 「いいね」、google の 「+1」、はてなブックマーク の 「B!」、Pocket の 「Pocket」 ボタン 等、 俗に言う ソーシャルボタン を まとめて 一気 に設置する方法をここでは載せます。 いろいろと方法はあるかと思いますが・・・ここでは、 Blogger の テンプレート を編集して実現する方法です。
([2015/03/15] 本記事ではそれぞれのSNS提供モジュールを利用しています。オリジナルデザインにしたい場合、"Blooger に オリジナルデザイン の ソーシャルボタン を設置する方法" をご参照ください。)
Internet Explorer 10 以上 で対応している タッチイベント。
"タッチイベント" と表記しましたが、IE では マウス、タッチ、および ペン を一元的に Pointer イベント
として扱います。
ここでは IE の Pointer イベント
についてまとめます。
ちなみに・・・IE10 は、Chrome 等 で対応している touch イベント
に対応してないようです。。
そのイベント発生の取り回し方もやや違うようで、MSIE で 複数タッチ を利用する際は要注意です。
具体的な違いは、IE では touchmove
相当の MSPointerMove
が タッチの数ずつ発生し、それらを実装側で観測(pointerid
を利用して識別)しなければならない点です。
※ webkit の touch イベント については こちら。
Pointer イベント 対応 有無 の 確認
ブラウザ が Pointer イベント
が利用可能かどうか以下の JavaScriptコード で確認します。
if (window.navigator.msPointerEnabled) { // "Pointer" イベント が利用可能 }
デフォルト の タッチ動作 を 無効化
IE は デフォルト で パン、ピンチによるズーム、スワイプによる前/後ろページへ移動 等ができます。 ・・・できてしまう、が正しいんでしょうか? 他のブラウザではできないので、すべて無効化します。 無効化は以下の CSS 設定で可能です。
html, document, body { -ms-touch-action: none; }
webkit における タッチイベント の処理方法の基本です。 MSIE は 独自実装 してくれているのでそちらで対応します・・・
MSIE の タッチイベント については こちら。
WCF を 用いて RESTful サービス を作成していると、HTTP レスポンス ヘッダー を任意に変更 ── 場合によっては カスタムヘッダー を追加 ── することで、
クライアント側の処理を対応しやすくしたい場合があるかと思います。
ここでは、HTTP レスポンス ヘッダー を変更する サンプルコード を記載します。
基本的には OutgoingWebResponseContext クラス
を利用することで レスポンスヘッダー を変更できるようです。
※ WCF を 用いた RESTful サービス の構築方法 は こちら。
Internet Explorer 11 から UserAgent 文字列が変更になるそうです
(詳細は こちら)。
その結果、今まで MSIE
を使った Internet Explorer の判別が出来なくなります。
これでは困るので、従来の IE も含めて IE であることを判別できる JavaScript を以下で記載します。
Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv 11.0) like Gecko
Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; Touch; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729; Tablet PC 2.0; rv:11.0) like Gecko
Mozilla/5.0 (Windows NT 6.4; WOW64; Trident/7.0; .NET4.0E; .NET4.0C; rv:11.0) like Gecko
var ua, isIE, array, version; // UserAgetn を小文字に正規化 ua = window.navigator.userAgent.toLowerCase(); // IE かどうか判定 isIE = (ua.indexOf('msie') >= 0 || ua.indexOf('trident') >= 0); // IE の場合、バージョンを取得 if (isIE) { array = /(msie|rv:?)\s?([\d\.]+)/.exec(userAgent); version = (array) ? array[2] : ''; }
Function.prototype.bind( context )
を用いると "スコープ (this) の固定" が出来ます。
JavaScript で オブジェクト指向 な開発を行っていると、"スコープ (this) の固定" は大変便利です。
ここでは 関数の詳細 と 使用例 (jQuery) を記載します。
概要
"this" および 引数 を固定して、新しい関数を生成します。
引数
引数
クロスドメイン制約 を 回避 する サーバー実装 を WCF サービス を用いて JSONP で実現します。
クロスドメイン通信 を実現するには "サーバー側" と "クライアント側" の2カ所に対して手を入れる必要があるかどうか考えます。 ここでは、"サーバー側" に手を加えて クロスドメイン通信 を実現する方法を載せます。 具体的には、JSONP形式 で レスポンス を返せるようにすることで、jQuery 等 で クロスドメイン通信 を行えるようにします。 今回は、WCF サービス を利用しての実装を行います。
※ WCF サービス で JSONP に対応した サービス を実装した場合、コールバック関数名 を指定する パラメター は callback
になるようです。
"変更できる" と記載のある記事もありましたが・・・具体的な方法はわかりませんでした。。
※ WCF サービス で RESTful な Web サービス を実現する方法は こちら をご参照ください。
WCF サービス を利用して、RESTful Web サービス を作成します。 ただ WCF サービス プロジェクト を追加しただけだと Web サービス としてはうまく動作しなかったので、 キチンと動作するまでに必要な環境整備、実装を記載します。
サンプルコード の ダウンロード 。
クロスドメイン制約 を 回避 する サーバー実装 を ASP.NET MVC を用いて JSONP で実現します。
クロスドメイン通信 を実現するには "サーバー側" と "クライアント側" の2カ所に対して手を入れる必要があるかどうか考えます。 ここでは、"サーバー側" に手を加えて クロスドメイン通信 を実現する方法を載せます。 具体的には、JSONP形式 で レスポンス を返せるようにすることで、jQuery 等 で クロスドメイン通信 を行えるようにします。
今回は次の図に示すような環境でのクロスドメイン通信を想定し、 この状況でサーバーBにおいて JSONP 形式 で応答する 実装 を載せます。 個人的な趣味趣向の都合で ASP.NET MVC でサンプルコード を作成しています。
クロスドメイン通信 を実現するには "サーバー側" と "クライアント側" の2カ所に対して手を入れる必要があるかどうか考えます。
ここでは、"サーバー側" の設定変更で GET リクエスト に関してクロスドメイン通信を実現する方法を載せます。
具体的には、Access-Control-Allow-Origin
ヘッダー を無条件に返す設定をすることで、
jQuery 等 で クロスドメイン通信 を行えるようにします。
クロスドメイン通信 を実現するには "サーバー側" と "クライアント側" の2カ所に対して手を入れる必要があるかどうか考えます。 ここでは、"クライアント側" ── 特に IE8, IE9 ── において クロスドメイン通信 を実現する 実装方法 を記載します。
IE8、 IE9 で クロスドメイン通信 を行う場合、 XDomainRequest を利用します。 この XDomainRequest は XMLHttpRequest と似て非なるもの(詳細は こちら)なので、そのまま jQuery.ajax で使うことが出来ません。 jQuery の バグトラック によると、この違いは プラグイン で吸収するそうです。 で、その プラグイン と 使い方 は以下の通りです。
Internet Explorer 系列 で クロスドメイン通信 を行う場合、
IE8, IE9 だと XDomainRequest
、IE10 では XMLHttpRequest
を利用します。
ここでは、似て非なる両者を比べてその違いをまとめます。
(IE7 以前は調べていません。。)
ちなみに、Chrome や Firefox はかなり以前から XmlHttpRequest level 2 (クロスドメイン通信) 対応しているようです(詳細はこちら)。
XDomainRequest は XMLHttpRequest level 2 に比べて、以下の制約があるようです。
JavaScript を用いて クロスドメイン で リクエストを行いたいと思うと、 "同一制限元ポリシー(Same Origin Policy)" に引っかかります。 そもそもその制約にある背景は何か…といったところから、制約内容、制約の例外、制約の回避についてまとめました。
クロスサイトリクエストフォージェリ(CSRF)対策。 悪意あるサイトからの不正な要求を拒否するため。
制約の回避方法を見ていてもそうですが、信頼できるサーバーかのリクエストしか受け付けないようになっているようです。
Chrome 11 以降の UserAgent に関して調べてみたので、ここにまとめます。 プラットフォーム周りが知りたかったのですが、どうも Internet Explorer と互換するようです。
Windows NT x.x
でプラットフォームが分かる。
Windows NT 6.2
の場合、Windows 8Windows NT 6.1
の場合、Windows 7Windows NT 6.0
の場合、Windows VistaWindows NT 5.1
の場合、Windows XPWOW64
Win64; x64
Win64; IA64
32bit Windows 7 - 32bit Chrome 28
Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.72 Safari/537.36
64bit Windows 7 - 32bit Chrome 28
Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.72 Safari/537.36
64bit Windows 7 - 64bit Chrome 28
Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.72 Safari/537.36
Mac OS X
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.151 Safari/535.19
Linux
Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.16 Safari/534.24
今回、参考にしたサイトは以下の通りです。
Blogger の 記事 一覧 を表示する ページ を作成します。 ここで紹介する方法では、ソート順(タイトル名、公開日付、更新日付)、表示方法(一覧、ラベル別)を任意に指定できます。 また、各要素に クラス名 が割り振られているので、好きな表示を簡単に実現できます。
とりあえず自分のブログで試したい方は デモページ(日本語) をご利用ください。
(…いくつかの ブログ で "記事一覧を表示する方法" が記載されていましたが、 個人的にしっくりこなかったので新しく作ってしまえ、という経緯です。。)
Blogger の 左メニュー から [ページ] を選択します。
[新しいページ] を選択します。
編集ページにおいて、以下の ソースコード を コピー して貼り付けます。
<script type="text/javascript"> var POSTSTOC_SETTINGS = { blogURL: 'garafu.blogspot.jp', // Blogger の ドメイン を設定 maxResults: Infinity, // 最大受信記事数 を設定。Infinity ですべての記事を受信 sort: { key: 'published', // ソートキー [title, published, updated] order: 'default' // ソート順 [default, asc, desc] }, printby: 'title', // 表示方法 [title, label, label.nameorder, label.contentsorder] newPost: { enabled: true, // 新着記事アイコンを表示するかどうか symbol: 'NEW !', // 新着記事の表示文字列 term: 30 // 新着記事判定する日数 }, thumbnail: { enabled: true, // サムネイル表示するかどうか noImageURL: '//garafu.github.io/blogger.toc/release/0.0.5/noimage.png' // サムネイルが存在しないときに割り当てる画像 }, published: { enabled: true, // 公開日を表示するかどうか format: 'yyyy/MM/dd' // 公開日のフォーマット }, updated: { enabled: true, // 更新日を表示するかどうか format: 'yyyy/MM/dd' // 更新日のフォーマット } }; </script> <link rel="stylesheet" type="text/css" href="//garafu.github.io/blogger.toc/release/0.0.12/simple.css" /> <script type="text/javascript" src="//garafu.github.io/blogger.toc/release/0.0.12/blogger.toc.min.js"></script>
以下の設定を変更します。細かな設定に関しては後述の説明をご確認ください。
blogURL | Blogger の ドメイン を設定します。 |
---|---|
sort.key |
記事ソート順を [title, published, updated] から設定します。デフォルト published。
|
printby | 表示方法を [title, label, label.nameorder, label.contentsorder] から設定します。デフォルト label。
|
thumbnail.enabled | サムネイルを表示するかどうか を設定します。デフォルト false 。 |
|
公開日を表示するかどうか を設定します。デフォルト false 。 |
updated.enabled | 更新日を表示するかどうか を設定します。デフォルト false 。 |
保存して公開します。
とりあえず試したい方は デモページ(日本語) をご参照ください。 試した結果が出力されるので、そのコードをコピー&ペーストすると簡単に "Blogger 記事 の 一覧表示" を作成できます。
{ blogURL: 'garafu.blogspot.com', maxResults: Infinity, keyword: 'JavaScript', sort: { key: 'published', order: 'default' }, printby: 'label', newPost: { enabled: false, symbol: 'NEW !', term: 30, target: 'published' }, thumbnail: { enabled: false, noImageURL: '//garafu.github.io/blogger.toc/release/0.0.5/noimage.png' }, published: { enabled: false, format: 'yyyy/MM/dd HH:mm:ss' }, updated: { enabled: false, format: 'yyyy/MM/dd HH:mm:ss' }, target: undefined }
プロパティ | 型 | 説明 | ||||||||
---|---|---|---|---|---|---|---|---|---|---|
blogURL |
string |
ブログのドメインを指定します。
https://garafu.blogspot.com/ であれば garafu.blogspot.com 部分のみを指定します。 |
||||||||
maxResults |
number |
受信する最大記事数を指定します。すべての記事を対象とする場合 Infinity を指定します。
デフォルト Infinity です。 |
||||||||
keyword |
string |
絞り込みたいキーワードを指定します。 日本語タグを指定する場合 URI エンコード を行ったものを指定します(デモページでは自動変換するので日本語のままでOKです)。 何も指定しなければすべてのタグを受信対象にします。 デフォルトは指定なしです。 | ||||||||
sort |
object |
ソート方法に関する設定を指定します。 | ||||||||
sort.key |
enum |
ソートキーを指定します。指定できる値は以下の通りです。
|
||||||||
sort.order |
enum |
ソート順を指定します。指定できる値は以下の通りです。
| ||||||||
printby |
enum |
表示方法を指定します。指定できる値は以下の通りです。
|
||||||||
newPost |
object |
新着記事表示に関する設定を指定します。 | ||||||||
newPost.enabled |
boolean |
新着記事アイコンを表示するかどうかを指定します。 | ||||||||
newPost.symbol |
string |
新着記事アイコンとして表示する文字列を指定します。 | ||||||||
newPost.term |
number |
新着記事として判定する期間(日数)を指定します。 | ||||||||
newPost.target |
enum |
新着記事として判定するとき、比較対象とする日付を指定します。指定できる値は以下の通りです。
|
||||||||
thumbnail |
object |
サムネイル表示に関する設定を指定します。 サムネイルは記事中の一番最初にある画像が使用されます。 サムネイルは通常 72px × 72px の大きさです。 | ||||||||
thumbnail.enabled |
boolean |
サムネイルを表示するかどうかを指定します。 | ||||||||
thumbnail.noImageURL |
string |
サムネイルが存在しない場合に表示する画像へのパス(URL)を指定します。 | ||||||||
published |
object |
公開日に関する設定を指定します。 | ||||||||
published.enabled |
boolean |
公開日を表示するかどうかを指定します。 | ||||||||
published.format |
string |
公開日を表示する場合、どのように表記するかを指定します。 利用できる制御文字は (*1) 日付フォーマット をご参照ください。 | ||||||||
updated |
object |
更新日に関する設定を指定します。 | ||||||||
updated.enabled |
boolean |
更新日を表示するかどうかを指定します。 | ||||||||
updated.format |
string |
更新日を表示する場合、どのように表記するかを指定します。 利用できる制御文字は (*1) 日付フォーマット をご参照ください。 | ||||||||
target |
string |
リンクの開き方( a タグ の target 属性 )を指定します。デフォルトは undefined で指定なしです。 |
制御文字 | 説明 | サンプル |
---|---|---|
d | 月の日にち (1 ~ 31)。 | 3 |
dd | 月の日にち (01 ~ 31)。 | 03 |
E | 曜日の省略名。 | 火 |
EE | 曜日の完全名。 | 火曜日 |
G | 時期または時代 (年号)。 | 西暦 |
h | 12時間形式の時間 (1 ~ 12)。 | 5 |
hh | 12時間形式の時間 (01 ~ 12)。 | 05 |
H | 24時間形式の時間 (1 ~ 24)。 | 8 |
HH | 24時間形式の時間 (01 ~ 24)。 | 08 |
m | 分 (0 ~ 59)。 | 2 |
mm | 分 (00 ~ 59)。 | 02 |
M | 月 (1 ~ 12)。 | 6 |
MM | 月 (01 ~ 12)。 | 06 |
MMM | 月の省略名。 | 1 |
MMMM | 月の完全名。 | 1月 |
s | 秒 (1 ~ 59)。 | 6 |
ss | 秒 (01 ~ 59)。 | 06 |
t | AM/PM 指定子。 | 午前 |
yy | 2桁の年。 | 98 |
yyyy | 4桁の年。 | 1998 |
z | UTCを基準とする時間単位のオフセット (先行ゼロなし)。 | -8 |
zz | UTCを基準とする時間単位のオフセット (先行ゼロ付きの 1桁の値)。 |
-08 |
zzz | UTCを基準とする時間および分単位のオフセット。 | -08:00 |
スタイルシート
各要素に対してできるだけ クラス名 を割り振るよう作成されています。
あらかじめある スタイルシート で思うような表示ができていない場合、
<link />
を利用せず、自前で stylesheet を記述することができます。
不具合、ご要望等はこの記事にレスしていいただくか、こちら(Github garafu/blogger.toc Issues) までご連絡いただけると幸いです。
参考記事
Blogger の フィード URL (RSS や Atom、JSON を受信する URL)を作成する Webアプリ です。 * は必須入力項目です。 必要事項を入力した後、「フィード URL 生成」で フィード URL が生成されます。
* | ブログURL | |
* | リソース | |
* | 本文 | |
ラベル | ||
応答フォーマット | ||
取得開始番号 | (1 から始まる数値) | |
最大取得数 | ||
ソート順 | ||
公開日付 |
開始
(例:2013-07-10T00:00:00)
終了
|
|
更新日付 |
開始
(例:2013-07-10T00:00:00)
終了
|
|
リダイレクト | ||
コールバック | ||
|
別ウィンドウで フィードを開く |
Blogger の feed URL で利用可能な パラメタ― を一覧にしてまとめました。 RSS や json を利用しての2次利用で必要な情報になるかと思います。
(2013/07/10 Blogger の フィード URL 生成 ツール)
フィード URL の基本構成
リソース
ラベル
クエリ パラメタ―
https://BLOG_NAME.blogspot.com/feeds/RESOURCE/RESPONSE[LABEL][?QUERY]
default
… 本文すべて取得します。summary
… 本文を先頭のみ取得します。投稿した記事に対するフィードを取得します。
サンプルURL
https://garafu.blogspot.jp/feeds/posts/default?alt=rss
コメントに対するフィードを取得します。
サンプルURL
https://garafu.blogspot.jp/feeds/comments/default?alt=rss
投稿記事を指定したコメントに対するフィードを取得します。 POSTIDは記事の編集画面を開いたとき URL 欄 に記載されています。
サンプルURL
https://garafu.blogspot.jp/feeds/1102748937110099330/comments/default?alt=rss
作成されたページに対するフィードを取得します。
サンプルURL
https://garafu.blogspot.jp/feeds/pages/default?alt=rss
ラベル名で絞り込みを行います。
必ず /-/
を記述します。
ラベル名は URL エンコード を行ったものを記載します。
複数指定する場合は /-/label1/label2
のように記載していきます。
サンプルURL
https://garafu.blogspot.jp/feeds/posts/summary/-/JavaScript?alt=rss
[おまけ] URL エンコード
Alternative representation type(代替表現型)。 応答フォーマットの種類を指定します。
引数
atom
… デフォルト。Atom フィードを返します。rss
… RSS 2.0 フィードを返します。json
… JSON 形式で返します。atom-in-script
… scriptタグ で囲まれた Atom フィードを返します。rss-in-script
… scriptタグ で囲まれた RSS 2.0 フィードを返します。json-in-script
… scriptタグ で囲まれた JSON 形式 のフィードを返します。atom-service
… Atom サービスドキュメントを返します。サンプルURL
https://garafu.blogspot.jp/feeds/posts/summary?alt=rss
取得するエントリーの最大数を指定します。 最大 500 まで指定できます。 500 以上を指定しても 500 までしか取得できません。
引数
サンプルURL
https://garafu.blogspot.jp/feeds/posts/summary?alt=rss&max-results=100
1 から始まるデータ取得開始番号を指定します。
引数
サンプルURL
https://garafu.blogspot.jp/feeds/posts/summary?alt=rss&start-index=101&max-results=100
受信するフィードのソート順を指定します。
引数
lastmodified
… デフォルト。starttime
… ?updated
… 更新日付順に並び替えます。published
… 投稿日付順に並び替えます。サンプルURL
https://garafu.blogspot.jp/feeds/posts/summary?alt=rss&orderby=published
orderby=published
と一緒に指定することで、取得する期間を制限します。
引数
サンプルURL
https://garafu.blogspot.jp/feeds/posts/summary?alt=rss&orderby=published&published-min=2010-01-01T00:00:00+09:00published-max=2011-01-01T00:00:00+09:00
orderby=updated
と一緒に指定することで、取得する期間を制限します。
引数
サンプルURL
https://garafu.blogspot.jp/feeds/posts/summary?alt=rss&orderby=updated&updated-min=2010-01-01T00:00:00+09:updated-max=2011-01-01T00:00:00+09:00
クエリ パラメタ― が正しく指定されているかどうか厳密にチェックを行うか指定します。
引数
サンプルURL
https://garafu.blogspot.jp/feeds/posts/summary?alt=json&strict=true
リダイレクトを許可するかどうか指定します。
引数
サンプルURL
https://garafu.blogspot.jp/feeds/posts/summary?alt=rss&redirect=true
alt=json-in-script
を指定した際、読み込み完了時に呼び出すコールバック関数を指定します。
引数
サンプルURL
https://garafu.blogspot.jp/feeds/posts/summary?alt=json-in-script&callback=loadFeeds
今回、参考にしたサイトは以下の通りです。
そこに存在する SQL Server Express の データベース ファイル(拡張子 .mdf のファイル) を、黒猫 SQL Studio で開いて内容を見る方法です。 黒猫 SQL Studio は無料のツールでインストールが不要(配置のみで動作)なので、個人的には好んで使っています。 SQLコマンドはもちろん、デーブル内容の閲覧もできます。 以下では .mdf ファイル を 黒猫 SQL Studio で開くまでの手順を記載します。