kokkai
Version:
A TypeScript client for the Kokkai API, providing access to Japanese Diet data.
247 lines (246 loc) • 7.4 kB
TypeScript
/**
* 院名
*/
export type HouseName = '衆議院' | '参議院' | '両院' | '両院協議会';
/**
* 検索対象箇所 (議事冒頭・本文指定)
*/
export type SearchRange = '冒頭' | '本文' | '冒頭・本文';
/**
* 発言者役割
*/
export type SpeakerRole = '証人' | '参考人' | '公述人';
/**
* 応答形式 (内部的にはJSONを推奨)
*/
export type RecordPacking = 'xml' | 'json';
/**
* イメージ種別
*/
export type ImageKind = '会議録' | '目次' | '索引' | '附録' | '追録';
/**
* 基本となる検索パラメータ
*/
export interface BaseSearchParams {
/** 検索結果の取得開始位置 (1〜) */
startRecord?: number;
/** 一回の最大取得件数 */
maximumRecords?: number;
/** 院名 */
nameOfHouse?: HouseName;
/** 会議名 (部分一致, スペース区切りでOR検索) */
nameOfMeeting?: string;
/** 検索語 (発言内容等, 部分一致, スペース区切りでAND検索) */
any?: string;
/** 発言者名 (部分一致, スペース区切りでOR検索) */
speaker?: string;
/** 開会日付/始点 (YYYY-MM-DD) */
from?: string;
/** 開会日付/終点 (YYYY-MM-DD) */
until?: string;
/** 追録・附録指定 (true: 限定する) */
supplementAndAppendix?: boolean;
/** 目次・索引指定 (true: 限定する) */
contentsAndIndex?: boolean;
/** 検索対象箇所 (any指定時) */
searchRange?: SearchRange;
/** 閉会中指定 (true: 限定する) */
closing?: boolean;
/** 発言番号 (完全一致) */
speechNumber?: number;
/** 発言者肩書き (部分一致) */
speakerPosition?: string;
/** 発言者所属会派 (部分一致, 正式名称のみ) */
speakerGroup?: string;
/** 発言者役割 */
speakerRole?: SpeakerRole;
/** 発言ID (会議録ID_発言番号3桁, 完全一致) */
speechID?: string;
/** 会議録ID (21桁英数字, 完全一致) */
issueID?: string;
/** 国会回次From (単独指定: 完全一致, Toと指定: 範囲) */
sessionFrom?: number;
/** 国会回次To (単独指定: 完全一致, Fromと指定: 範囲) */
sessionTo?: number;
/** 号数From (単独指定: 完全一致, Toと指定: 範囲, 0は目次等) */
issueFrom?: number;
/** 号数To (単独指定: 完全一致, Fromと指定: 範囲, 0は目次等) */
issueTo?: number;
/** 応答形式 (クライアント内部で'json'を強制するため通常指定不要) */
recordPacking?: RecordPacking;
}
/**
* APIレスポンスの共通部分
*/
interface BaseResponse {
/** 総結果件数 */
numberOfRecords: number;
/** 今回の返戻件数 */
numberOfReturn: number;
/** 今回の開始位置 */
startRecord: number;
/** 次の検索開始位置 (存在する場合) */
nextRecordPosition?: number;
}
/**
* 発言情報 (共通)
*/
interface SpeechRecordBase {
/** 発言ID */
speechID: string;
/** 発言番号 */
speechOrder: number;
/** 発言者名 */
speaker: string;
/** 発言URL */
speechURL: string;
}
/**
* 発言情報 (会議単位簡易出力のspeechRecord)
*/
export type MeetingListSpeechRecord = Pick<SpeechRecordBase, 'speechID' | 'speechOrder' | 'speaker' | 'speechURL'>;
/**
* 会議録情報 (会議単位簡易出力)
*/
export interface MeetingListItem {
/** 会議録ID */
issueID: string;
/** イメージ種別 */
imageKind: ImageKind;
/** 検索対象箇所 */
searchObject: SearchRange;
/** 国会回次 */
session: number;
/** 院名 */
nameOfHouse: string;
/** 会議名 */
nameOfMeeting: string;
/** 号数 */
issue: string;
/** 開催日付 (YYYY-MM-DD) */
date: string;
/** 閉会中フラグ */
closing?: boolean;
/** 発言記録 (any検索した場合のみ含まれる) */
speechRecord?: MeetingListSpeechRecord[];
/** 会議録テキスト表示画面のURL */
meetingURL: string;
/** 会議録PDF表示画面のURL (存在する場合) */
pdfURL?: string;
}
/**
* 会議単位簡易出力API (/meeting_list) のレスポンス型 (JSON)
*/
export interface MeetingListResponse extends BaseResponse {
meetingRecord: MeetingListItem[];
}
/**
* 発言情報 (会議単位出力・発言単位出力の詳細)
*/
export interface SpeechRecordDetail extends SpeechRecordBase {
/** 発言者よみ */
speakerYomi?: string;
/** 発言者所属会派 */
speakerGroup?: string;
/** 発言者肩書き */
speakerPosition?: string;
/** 発言者役割 */
speakerRole?: SpeakerRole;
/** 発言本文 */
speech: string;
/** 発言掲載開始ページ */
startPage?: number;
}
/**
* 発言情報 (会議単位出力のspeechRecord)
*/
export interface MeetingSpeechRecord extends SpeechRecordDetail {
/** レコード登録日時 */
createTime?: string;
/** レコード更新日時 */
updateTime?: string;
}
/**
* 会議録情報 (会議単位出力)
*/
export interface MeetingItem extends Omit<MeetingListItem, 'speechRecord'> {
/** 発言記録 (全発言) */
speechRecord: MeetingSpeechRecord[];
}
/**
* 会議単位出力API (/meeting) のレスポンス型 (JSON)
*/
export interface MeetingResponse extends BaseResponse {
meetingRecord: MeetingItem[];
}
/**
* 発言情報 (発言単位出力のspeechRecord)
*/
export interface SpeechItemRecord extends SpeechRecordDetail {
/** 会議録ID */
issueID: string;
/** イメージ種別 */
imageKind: ImageKind;
/** 検索対象箇所 */
searchObject: SearchRange;
/** 国会回次 */
session: number;
/** 院名 */
nameOfHouse: string;
/** 会議名 */
nameOfMeeting: string;
/** 号数 */
issue: string;
/** 開催日付 */
date: string;
/** 閉会中フラグ */
closing?: boolean;
/** 会議録テキスト表示画面のURL */
meetingURL: string;
/** 会議録PDF表示画面のURL (存在する場合) */
pdfURL?: string;
}
/**
* 発言単位出力API (/speech) のレスポンス型 (JSON)
*/
export interface SpeechResponse extends BaseResponse {
speechRecord: SpeechItemRecord[];
}
/**
* エラーレスポンス型 (JSON)
*/
export interface ErrorResponse {
/** エラーメッセージ */
message: string;
/** エラー詳細 (存在する場合) */
details?: string[];
}
/**
* エラーレスポンス型 (XMLルート) - XMLパースが必要な場合
*/
export interface XmlErrorResponse {
data: {
diagnostics: {
diagnostic: {
message: string;
details?: string | string[];
};
};
};
}
/**
* クライアント設定オプション
*/
export interface KokkaiClientOptions {
/** APIのベースURL (デフォルト: https://kokkai.ndl.go.jp/api) */
baseURL?: string;
/** リクエストタイムアウト (ミリ秒, デフォルト: 10000) */
timeout?: number;
/** リクエスト間の待機時間 (ミリ秒, レートリミット対策, デフォルト: 3000) */
requestInterval?: number;
/** User-Agentヘッダー (設定推奨) */
userAgent?: string;
/** 追加のHTTPヘッダー */
headers?: Record<string, string>;
}
export {};