├── .github └── workflows │ └── main.yml ├── LICENSE ├── README.md ├── css ├── style.css ├── style.css.map ├── style.min.css └── style.scss ├── data ├── gian.csv ├── gian.json ├── gian_status.csv ├── gian_status.json ├── gian_summary.json ├── gian_type.csv ├── gian_type.json └── updatetime.json ├── img ├── image_1200_630.png ├── image_1280_640.png ├── material-icon-arrow-down.svg ├── material-icon-chart-white.svg ├── material-icon-chart.svg ├── material-icon-close.svg ├── material-icon-download.svg ├── material-icon-info.svg ├── material-icon-openinnew.svg ├── material-icon-search-white.svg ├── material-icon-search.svg ├── smri-logo.svg ├── social-icon-copy.svg ├── social-icon-facebook.svg ├── social-icon-line.png └── social-icon-twitter.svg ├── index.html ├── js ├── script.js └── script.min.js ├── main.py └── requirements.txt /.github/workflows/main.yml: -------------------------------------------------------------------------------- 1 | name: main 2 | 3 | on: 4 | schedule: 5 | - cron: '0 14 * * *' 6 | workflow_dispatch: 7 | 8 | jobs: 9 | update-files: 10 | runs-on: ubuntu-latest 11 | steps: 12 | - uses: actions/checkout@v2 13 | - name: Setup Python 14 | uses: actions/setup-python@v2 15 | with: 16 | python-version: '3.8' 17 | architecture: 'x64' 18 | - name: Get Python version 19 | run: python -V 20 | - name: Install dependencies 21 | run: pip install -r requirements.txt 22 | - name: Run Python 23 | run: python main.py 24 | - name: git setting 25 | run: | 26 | git config --local user.email "example@smartnews.com" 27 | git config --local user.name "data-updater" 28 | - name: Commit files 29 | run: | 30 | git add . 31 | git commit -m "Update data" -a 32 | git pull 33 | git push origin main 34 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 smartnews-smri 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 国会議案データベース:衆議院 2 | - 衆議院の公式ウェブサイトから国会に提出された議案をデータベース化しました。 3 | - 商用・非商用を問わず、自由にデータのダウンロードや検索が可能です。 4 | 5 | ## 背景 6 | 7 | - 衆議院のウェブサイト「議案情報」では国会に提出された議案を確認できますが、検索や集計を行うには各ページに分かれたデータを整理する必要があります。 8 | - そこでスマートニュース メディア研究所では、議案のデータを衆議院ウェブサイトから取得し、CSVやJSONなど機械判読可能なデータで公開するとともに、[閲覧用のページ](https://smartnews-smri.github.io/house-of-representatives/)を作成して自由に検索・集計できるようにしました。 9 | 10 | ![image_1280_640](https://user-images.githubusercontent.com/12462251/176733194-e9155042-2d85-48be-81b5-ebd8e113c050.png) 11 | 12 | ## 公開データの見方 13 | 14 | - [/data](https://github.com/smartnews-smri/house-of-representatives/tree/main/data)にデータファイルを公開しています。原則としてCSVとJSONの両方で公開します。 15 | - [gian.csv](https://github.com/smartnews-smri/house-of-representatives/blob/main/data/gian.csv) / [gian.json](https://github.com/smartnews-smri/house-of-representatives/blob/main/data/gian.json):すべての議案データを掲載したファイルです。途中経過も含むため、議案そのものの数よりも大きくなります。たとえば第150回国会に提出され、第151回で成立した議案は掲載回次「150」および「151」のデータが2行発生します。 16 | - 掲載回次:議案が掲載された国会の回次。 17 | - キャプション:議案情報ページのテーブルに付されたキャプション。 18 | - 種類〜審議状況:それぞれ議案情報ページにあるテーブルの同名列。 19 | - 経過情報 / 経過情報URL:議案情報ページにあるテーブル「経過情報」列のテキストとリンクURL。 20 | - 本文情報 / 本文情報URL:議案情報ページにあるテーブル「本文情報」列のテキストとリンクURL。 21 | - 議案種類〜議案提出の賛成者:それぞれ議案経過情報ページにあるテーブルの同名列。 22 | - なお「議案提出回次」「議案番号」「議案件名」は、それぞれ「提出回次」「番号」「議案件名」と重複するため掲載していない。 23 | - [gian_summary.json](https://github.com/smartnews-smri/house-of-representatives/blob/main/data/gian_summary.json):gianから掲載回次の重複を排除したもの。 24 | - 提出回次、種類、番号、議案件名が同じものを同じ議案と判断しています。 25 | - データ構造の関係からJSON形式だけで公開しています。 26 | - [gian_status.csv](https://github.com/smartnews-smri/house-of-representatives/blob/main/data/gian_status.csv) / [gian_status.json](https://github.com/smartnews-smri/house-of-representatives/blob/main/data/gian_status.json):gianから「審議状況」のデータを集計したもの。 27 | - [gian_type.csv](https://github.com/smartnews-smri/house-of-representatives/blob/main/data/gian_type.csv) / [gian_type.json](https://github.com/smartnews-smri/house-of-representatives/blob/main/data/gian_type.json):gianから「種類」のデータを集計したもの。 28 | 29 | 30 | ## 閲覧用ページについて 31 | 32 | - 本プロジェクトのデータを閲覧・検索できるページを公開しています。 33 | - URL: https://smartnews-smri.github.io/house-of-representatives/ 34 | - 「集計情報」では成立した/撤回された議案の数、議案を提出した国会議員、政党別の議案への賛否などの集計を見ることができます。 35 | - また「議案検索」では議案の件名や提出者、賛成・反対した政党名などから議案を検索できます。検索結果だけを選んでダウンロードすることも可能です。 36 | 37 | 38 | 39 | ## 二次利用とライセンスについて 40 | 41 | - すべてのデータとソースコードは自由に閲覧・ダウンロードが可能です。 42 | - GitHubプロジェクトのライセンスはMITライセンスとしており、商用・非商用を問わずご自由にお使いいただけます。 43 | - ソースコード等を引用する際の著作権表記は「スマートニュース メディア研究所」または「SmartNews Media Research Institute」としてください。 44 | - なお、本プロジェクトの利用によって生じたいかなる損害についても、開発者およびスマートニュース株式会社は一切責任を負いません。 45 | -------------------------------------------------------------------------------- /css/style.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | @import url("https://fonts.cdnfonts.com/css/roboto"); 3 | * { 4 | margin: 0; 5 | padding: 0; 6 | outline: none; 7 | box-sizing: border-box; 8 | font-family: 'Roboto', -apple-system, BlinkMacSystemFont, '游ゴシック体', YuGothic, 'Yu Gothic Medium', 'Noto Sans JP', sans-serif; 9 | color: inherit; 10 | font-size: inherit; 11 | font-weight: inherit; 12 | letter-spacing: 0.03em; } 13 | 14 | body { 15 | width: 100%; 16 | background-color: #edeff0; 17 | overflow-y: scroll; 18 | color: #333; 19 | font-size: 16px; 20 | font-weight: normal; } 21 | body a { 22 | color: inherit; } 23 | body hr { 24 | border: none; 25 | border-bottom: 1px solid #ccc; 26 | margin-top: 32px; 27 | margin-bottom: 32px; } 28 | body ul { 29 | list-style-type: none; 30 | padding: 0; 31 | margin: 0; } 32 | body input, body textarea, body select { 33 | font-size: 16px; 34 | padding: 8px 20px; 35 | border: 1px solid #fff; 36 | border-radius: 20px; 37 | background-color: #fefefe; } 38 | body input:focus, body textarea:focus, body select:focus { 39 | animation: shadow 2s linear 0s infinite forwards; } 40 | @keyframes shadow { 41 | 0%, 42 | 100% { 43 | box-shadow: 0px 0px 4px #03fccf; } 44 | 50% { 45 | box-shadow: 0px 0px 4px #98b5ac; } } 46 | body select { 47 | appearance: none; 48 | background-image: url(../img/material-icon-arrow-down.svg); 49 | background-repeat: no-repeat; 50 | background-position: calc(100% - 10px) calc(50% + 1px); 51 | padding: 8px 48px 8px 20px; } 52 | body .sn-color { 53 | background: linear-gradient(90deg, #ff645b, #ff645b 25%, #ffc73d 0, #ffc73d 50%, #54e470 0, #54e470 75%, #0fbbe7 0, #0fbbe7); } 54 | body h2 { 55 | margin-top: 32px; 56 | font-size: 20px; 57 | padding-left: 24px; 58 | position: relative; } 59 | body h2 .icon { 60 | width: 22px; 61 | height: 22px; 62 | background-repeat: no-repeat; 63 | background-position: center center; 64 | background-size: contain; 65 | position: absolute; 66 | top: 4px; 67 | left: 0; } 68 | body h2 .icon.info { 69 | background-image: url(../img/material-icon-info.svg); } 70 | body h2 .icon.chart { 71 | background-image: url(../img/material-icon-chart.svg); } 72 | body h2 .icon.search { 73 | background-image: url(../img/material-icon-search.svg); } 74 | body .box { 75 | margin-top: 4px; 76 | width: 100%; 77 | height: 2px; } 78 | body .block-description { 79 | font-size: 14px; 80 | color: #999; } 81 | 82 | #cover { 83 | position: fixed; 84 | width: 100%; 85 | height: 100%; 86 | top: 0; 87 | left: 0; 88 | background-color: #f6f6f6; 89 | z-index: 1000; } 90 | #cover div { 91 | position: fixed; 92 | width: 100%; 93 | top: 50%; 94 | left: 50%; 95 | transform: translate(-50%, -50%); 96 | text-align: center; } 97 | #cover div p { 98 | margin-top: 16px; 99 | font-size: 13px; 100 | line-height: 24px; } 101 | #cover div img { 102 | display: block; 103 | margin: 0 auto; 104 | width: 120px; 105 | height: 45.2814px; } 106 | 107 | #container { 108 | overflow-x: hidden; } 109 | #container #title-block { 110 | width: 100%; 111 | background-color: #fefefe; } 112 | #container #title-block #title-inner { 113 | width: calc(100% - 32px); 114 | max-width: 960px; 115 | margin: 0 auto; 116 | padding: 64px 0; } 117 | #container #title-block #title-inner h3 { 118 | margin: 0; 119 | margin-top: 8px; 120 | font-size: 15px; 121 | color: #999; } 122 | #container #title-block #title-inner h1 { 123 | margin-top: 8px; 124 | font-size: 24px; 125 | font-weight: bold; 126 | color: #222; } 127 | @media only screen and (min-width: 400px) { 128 | #container #title-block #title-inner h1 { 129 | font-size: 26px; } } 130 | @media only screen and (min-width: 700px) { 131 | #container #title-block #title-inner h1 { 132 | font-size: 28px; } } 133 | #container #title-block #title-inner .box { 134 | width: 64px; 135 | height: 8px; 136 | margin-left: 2px; } 137 | #container #title-block #title-inner p { 138 | margin-top: 8px; 139 | font-size: 14px; 140 | line-height: 26px; 141 | color: #666; } 142 | @media only screen and (min-width: 400px) { 143 | #container #title-block #title-inner p { 144 | font-size: 15px; } } 145 | @media only screen and (min-width: 700px) { 146 | #container #title-block #title-inner p { 147 | font-size: 16px; } } 148 | #container #search-block { 149 | width: calc(100% - 32px); 150 | max-width: 960px; 151 | margin: 0 auto; } 152 | #container #search-block #form-block .control { 153 | margin-top: 16px; } 154 | #container #search-block #form-block .control .label { 155 | font-size: 14px; 156 | color: #333; } 157 | #container #search-block #form-block .control input, #container #search-block #form-block .control select { 158 | margin-top: 4px; } 159 | #container #search-block #form-block .control button { 160 | margin-top: 32px; 161 | display: block; 162 | width: 108px; 163 | height: 36px; 164 | color: #fefefe; 165 | background-color: #369; 166 | background-image: url(../img/material-icon-search-white.svg); 167 | background-position: 16px calc(50% + 1px); 168 | background-size: 24px; 169 | background-repeat: no-repeat; 170 | border-radius: 20px; 171 | border: none; 172 | box-shadow: 1px 0 2px rgba(0, 0, 0, 0.2); 173 | padding-left: 12px; } 174 | #container #search-block #form-block .control button:hover { 175 | cursor: pointer; 176 | opacity: 0.7; } 177 | #container #search-block #form-block .control #input-gian-title { 178 | width: 100%; 179 | max-width: 640px; } 180 | #container #search-block #form-block .control .control-note { 181 | font-size: 13px; 182 | color: #999; 183 | margin-top: 4px; } 184 | #container #search-block #form-block .box { 185 | width: 100%; 186 | height: 1px; 187 | margin: 32px 0; } 188 | #container #search-block #result-block { 189 | width: 100%; 190 | max-width: 960px; 191 | margin: 0 auto; } 192 | #container #search-block #result-block #result-number { 193 | color: #666; 194 | font-size: 14px; } 195 | #container #search-block #result-block #download-result { 196 | display: inline-block; 197 | margin-top: 4px; 198 | font-size: 14px; } 199 | #container #search-block #result-block #ul-gian-list { 200 | margin-top: 16px; } 201 | #container #search-block #result-block #ul-gian-list li { 202 | border-top: 1px solid #ddd; 203 | padding: 8px 0; } 204 | #container #search-block #result-block #ul-gian-list li div:nth-child(1) { 205 | font-size: 13px; 206 | color: #932; } 207 | #container #search-block #result-block #ul-gian-list li div:nth-child(1) span { 208 | color: #369; } 209 | #container #search-block #result-block #ul-gian-list li div:nth-child(2) { 210 | margin-top: 4px; 211 | font-size: 15px; 212 | font-weight: bold; 213 | height: 44px; 214 | overflow: hidden; } 215 | #container #search-block #result-block #ul-gian-list li div:nth-child(3) { 216 | margin-top: 4px; 217 | font-size: 13px; 218 | color: #888; } 219 | #container #search-block #result-block #ul-gian-list li:last-child { 220 | border-bottom: 1px solid #ddd; } 221 | #container #search-block #result-block #ul-gian-list li:hover { 222 | background-color: #fefef6; 223 | cursor: pointer; } 224 | #container #search-block #single-gian-block #single-gian-cover { 225 | position: fixed; 226 | top: 0; 227 | left: 0; 228 | width: 100vw; 229 | height: 100vh; 230 | z-index: 100; 231 | background-color: rgba(0, 0, 0, 0); 232 | pointer-events: none; 233 | transition: all ease 250ms; } 234 | #container #search-block #single-gian-block #single-gian-content { 235 | position: fixed; 236 | top: 0; 237 | right: calc(428px * -1); 238 | height: 100vh; 239 | overflow-y: scroll; 240 | width: calc(100% - 32px); 241 | max-width: 428px; 242 | background-color: #fcfcfc; 243 | z-index: 200; 244 | padding: 16px; 245 | padding-top: 64px; 246 | transition: all ease 250ms; } 247 | #container #search-block #single-gian-block #single-gian-content #single-gian-button-close { 248 | position: absolute; 249 | top: 16px; 250 | right: 16px; 251 | width: 44px; 252 | height: 44px; 253 | border: none; 254 | border-radius: calc(44px * 0.5); 255 | background-color: transparent; 256 | background-image: url("../img/material-icon-close.svg"); 257 | background-position: center center; 258 | background-size: 80%; 259 | background-repeat: no-repeat; } 260 | #container #search-block #single-gian-block #single-gian-content #single-gian-button-close:hover { 261 | cursor: pointer; 262 | background-color: rgba(0, 0, 0, 0.1); } 263 | #container #search-block #single-gian-block #single-gian-content #single-gian-content-inner h3 { 264 | font-weight: bold; 265 | font-size: 16px; 266 | margin-bottom: 16px; } 267 | #container #search-block #single-gian-block #single-gian-content #single-gian-content-inner h4 { 268 | margin-top: 32px; 269 | font-weight: bold; 270 | font-size: 14px; } 271 | #container #search-block #single-gian-block #single-gian-content #single-gian-content-inner ul { 272 | margin-top: 16px; } 273 | #container #search-block #single-gian-block #single-gian-content #single-gian-content-inner ul li { 274 | margin-top: 8px; 275 | min-height: 44px; } 276 | #container #search-block #single-gian-block #single-gian-content #single-gian-content-inner ul li div:nth-child(1) { 277 | font-size: 13px; 278 | color: #aaa; } 279 | #container #search-block #single-gian-block #single-gian-content #single-gian-content-inner ul li div:nth-child(2) { 280 | font-size: 15px; 281 | color: #333; } 282 | #container #search-block #single-gian-block #single-gian-content #single-gian-content-inner ul.keika { 283 | margin-left: 16px; } 284 | #container #summary-block { 285 | width: calc(100% - 32px); 286 | max-width: 960px; 287 | margin: 0 auto; } 288 | #container #summary-block article { 289 | margin-top: 64px; } 290 | #container #summary-block article h4 { 291 | font-weight: bold; 292 | font-size: 16px; } 293 | #container #summary-block article p { 294 | margin-top: 4px; 295 | color: #999; 296 | font-size: 14px; } 297 | #container #summary-block article .mini-box { 298 | width: 32px; 299 | height: 1px; } 300 | #container #summary-block article .echarts-tooltip span { 301 | font: 15px / 20px "Roboto" !important; } 302 | #container #summary-block .chart-wrapper { 303 | margin-top: 16px; 304 | width: 100%; 305 | height: 360px; 306 | overflow-y: scroll; 307 | overflow-x: hidden; 308 | position: relative; } 309 | #container #switch-block #switch { 310 | position: fixed; 311 | width: calc(100vw - (16px * 2)); 312 | max-width: 360px; 313 | bottom: 16px; 314 | left: 16px; 315 | background-color: #fafafa; 316 | display: flex; 317 | border: none; 318 | height: 42px; 319 | border-radius: 21px; 320 | box-shadow: 0px 0px 4px rgba(0, 0, 0, 0.3); } 321 | @media screen and (min-width: 393px) { 322 | #container #switch-block #switch { 323 | left: calc(50vw - (360px / 2)); } } 324 | #container #switch-block #switch .switch-item { 325 | margin: 1px; 326 | color: #999; 327 | width: 50%; 328 | height: 40px; 329 | border-radius: 20px; 330 | font-size: 16px; 331 | text-align: center; 332 | line-height: 40px; 333 | padding-left: 16px; 334 | background-repeat: no-repeat; 335 | background-position: 32px calc(50%); 336 | background-size: 28px; } 337 | #container #switch-block #switch .switch-item:nth-child(1) { 338 | background-image: url(../img/material-icon-chart.svg); } 339 | #container #switch-block #switch .switch-item:nth-child(2) { 340 | background-position: 24px calc(50% + 1px); 341 | background-image: url(../img/material-icon-search.svg); } 342 | #container #switch-block #switch .switch-item:hover { 343 | cursor: pointer; 344 | background-color: rgba(0, 0, 0, 0.1); } 345 | #container #switch-block #switch .switch-item.selected { 346 | background-color: #a32; 347 | color: #fefefe; } 348 | #container #switch-block #switch .switch-item.selected:nth-child(1) { 349 | background-image: url(../img/material-icon-chart-white.svg); } 350 | #container #switch-block #switch .switch-item.selected:nth-child(2) { 351 | background-image: url(../img/material-icon-search-white.svg); } 352 | #container #summary-block, #container #search-block { 353 | display: none; } 354 | #container #summary-block.show, #container #search-block.show { 355 | display: block; } 356 | #container #footer-block { 357 | margin: 0 auto; 358 | margin-top: 64px; 359 | margin-bottom: 96px; 360 | width: calc(100% - 32px); 361 | max-width: 960px; } 362 | #container #footer-block .box { 363 | width: 100%; 364 | height: 2px; 365 | margin: 4px 0 16px 0; } 366 | #container #footer-block .box-2 { 367 | width: 100%; 368 | height: 1px; 369 | margin-top: 64px; } 370 | #container #footer-block p { 371 | font-size: 14px; 372 | color: #666; 373 | margin-bottom: 8px; } 374 | #container #footer-block a.logo { 375 | display: block; 376 | width: 240px; 377 | height: 30px; 378 | margin: 0 auto; 379 | margin-top: 32px; 380 | background-image: url(../img/smri-logo.svg); 381 | background-size: cover; 382 | background-position: center center; 383 | background-repeat: no-repeat; } 384 | #container #footer-block #social-buttons { 385 | width: fit-content; 386 | margin: 64px auto 64px auto; } 387 | #container #footer-block #social-buttons .social-button { 388 | display: inline-block; } 389 | #container #footer-block #social-buttons .social-button a { 390 | display: block; 391 | margin: 0 8px; 392 | width: 48px; 393 | height: 48px; 394 | border: 1px solid #fefefe; 395 | border-radius: 50%; 396 | background-size: contain; 397 | background-position: center center; 398 | background-repeat: no-repeat; 399 | z-index: 10; } 400 | #container #footer-block #social-buttons .social-button a.facebook { 401 | background-image: url(../img/social-icon-facebook.svg); } 402 | #container #footer-block #social-buttons .social-button a.twitter { 403 | background-image: url(../img/social-icon-twitter.svg); } 404 | #container #footer-block #social-buttons .social-button a.line { 405 | background-image: url(../img/social-icon-line.png); } 406 | #container #footer-block #social-buttons .social-button a.copy { 407 | background-image: url(../img/social-icon-copy.svg); 408 | background-color: #999; 409 | background-size: 65%; } 410 | #container #footer-block #social-buttons .social-button div { 411 | margin-top: 4px; 412 | color: #999; 413 | font-size: 12px; 414 | text-align: center; } 415 | #container #footer-block #social-buttons .social-button div.text-copy:before { 416 | content: "Copy"; } 417 | #container #footer-block #social-buttons .social-button div.text-copy.copied { 418 | color: #a32; } 419 | #container #footer-block #social-buttons .social-button div.text-copy.copied:before { 420 | content: "Copied!"; } 421 | #container #footer-block #social-buttons .margin { 422 | display: table-cell; 423 | width: 24px; } 424 | 425 | body.single-gian-show { 426 | overflow-y: hidden; } 427 | body.single-gian-show #single-gian-cover { 428 | background-color: rgba(0, 0, 0, 0.7) !important; 429 | pointer-events: auto !important; } 430 | body.single-gian-show #single-gian-content { 431 | right: 0px !important; } 432 | 433 | /*# sourceMappingURL=style.css.map */ 434 | -------------------------------------------------------------------------------- /css/style.css.map: -------------------------------------------------------------------------------- 1 | { 2 | "version": 3, 3 | "mappings": "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", 4 | "sources": ["style.scss"], 5 | "names": [], 6 | "file": "style.css" 7 | } 8 | -------------------------------------------------------------------------------- /css/style.min.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";@import url(https://fonts.cdnfonts.com/css/roboto);*{margin:0;padding:0;outline:0;box-sizing:border-box;font-family:Roboto,-apple-system,BlinkMacSystemFont,'游ゴシック体',YuGothic,'Yu Gothic Medium','Noto Sans JP',sans-serif;color:inherit;font-size:inherit;font-weight:inherit;letter-spacing:.03em}body{width:100%;background-color:#edeff0;overflow-y:scroll;color:#333;font-size:16px;font-weight:400}body a{color:inherit}body hr{border:none;border-bottom:1px solid #ccc;margin-top:32px;margin-bottom:32px}body ul{list-style-type:none;padding:0;margin:0}body input,body select,body textarea{font-size:16px;padding:8px 20px;border:1px solid #fff;border-radius:20px;background-color:#fefefe}body input:focus,body select:focus,body textarea:focus{animation:shadow 2s linear 0s infinite forwards}@keyframes shadow{0%,100%{box-shadow:0 0 4px #03fccf}50%{box-shadow:0 0 4px #98b5ac}}body select{appearance:none;background-image:url(../img/material-icon-arrow-down.svg);background-repeat:no-repeat;background-position:calc(100% - 10px) calc(50% + 1px);padding:8px 48px 8px 20px}body .sn-color{background:linear-gradient(90deg,#ff645b,#ff645b 25%,#ffc73d 0,#ffc73d 50%,#54e470 0,#54e470 75%,#0fbbe7 0,#0fbbe7)}body h2{margin-top:32px;font-size:20px;padding-left:24px;position:relative}body h2 .icon{width:22px;height:22px;background-repeat:no-repeat;background-position:center center;background-size:contain;position:absolute;top:4px;left:0}body h2 .icon.info{background-image:url(../img/material-icon-info.svg)}body h2 .icon.chart{background-image:url(../img/material-icon-chart.svg)}body h2 .icon.search{background-image:url(../img/material-icon-search.svg)}body .box{margin-top:4px;width:100%;height:2px}body .block-description{font-size:14px;color:#999}#cover{position:fixed;width:100%;height:100%;top:0;left:0;background-color:#f6f6f6;z-index:1000}#cover div{position:fixed;width:100%;top:50%;left:50%;transform:translate(-50%,-50%);text-align:center}#cover div p{margin-top:16px;font-size:13px;line-height:24px}#cover div img{display:block;margin:0 auto;width:120px;height:45.2814px}#container{overflow-x:hidden}#container #title-block{width:100%;background-color:#fefefe}#container #title-block #title-inner{width:calc(100% - 32px);max-width:960px;margin:0 auto;padding:64px 0}#container #title-block #title-inner h3{margin:0;margin-top:8px;font-size:15px;color:#999}#container #title-block #title-inner h1{margin-top:8px;font-size:24px;font-weight:700;color:#222}@media only screen and (min-width:400px){#container #title-block #title-inner h1{font-size:26px}}@media only screen and (min-width:700px){#container #title-block #title-inner h1{font-size:28px}}#container #title-block #title-inner .box{width:64px;height:8px;margin-left:2px}#container #title-block #title-inner p{margin-top:8px;font-size:14px;line-height:26px;color:#666}@media only screen and (min-width:400px){#container #title-block #title-inner p{font-size:15px}}@media only screen and (min-width:700px){#container #title-block #title-inner p{font-size:16px}}#container #search-block{width:calc(100% - 32px);max-width:960px;margin:0 auto}#container #search-block #form-block .control{margin-top:16px}#container #search-block #form-block .control .label{font-size:14px;color:#333}#container #search-block #form-block .control input,#container #search-block #form-block .control select{margin-top:4px}#container #search-block #form-block .control button{margin-top:32px;display:block;width:108px;height:36px;color:#fefefe;background-color:#369;background-image:url(../img/material-icon-search-white.svg);background-position:16px calc(50% + 1px);background-size:24px;background-repeat:no-repeat;border-radius:20px;border:none;box-shadow:1px 0 2px rgba(0,0,0,.2);padding-left:12px}#container #search-block #form-block .control button:hover{cursor:pointer;opacity:.7}#container #search-block #form-block .control #input-gian-title{width:100%;max-width:640px}#container #search-block #form-block .control .control-note{font-size:13px;color:#999;margin-top:4px}#container #search-block #form-block .box{width:100%;height:1px;margin:32px 0}#container #search-block #result-block{width:100%;max-width:960px;margin:0 auto}#container #search-block #result-block #result-number{color:#666;font-size:14px}#container #search-block #result-block #download-result{display:inline-block;margin-top:4px;font-size:14px}#container #search-block #result-block #ul-gian-list{margin-top:16px}#container #search-block #result-block #ul-gian-list li{border-top:1px solid #ddd;padding:8px 0}#container #search-block #result-block #ul-gian-list li div:nth-child(1){font-size:13px;color:#932}#container #search-block #result-block #ul-gian-list li div:nth-child(1) span{color:#369}#container #search-block #result-block #ul-gian-list li div:nth-child(2){margin-top:4px;font-size:15px;font-weight:700;height:44px;overflow:hidden}#container #search-block #result-block #ul-gian-list li div:nth-child(3){margin-top:4px;font-size:13px;color:#888}#container #search-block #result-block #ul-gian-list li:last-child{border-bottom:1px solid #ddd}#container #search-block #result-block #ul-gian-list li:hover{background-color:#fefef6;cursor:pointer}#container #search-block #single-gian-block #single-gian-cover{position:fixed;top:0;left:0;width:100vw;height:100vh;z-index:100;background-color:rgba(0,0,0,0);pointer-events:none;transition:all ease 250ms}#container #search-block #single-gian-block #single-gian-content{position:fixed;top:0;right:calc(428px * -1);height:100vh;overflow-y:scroll;width:calc(100% - 32px);max-width:428px;background-color:#fcfcfc;z-index:200;padding:16px;padding-top:64px;transition:all ease 250ms}#container #search-block #single-gian-block #single-gian-content #single-gian-button-close{position:absolute;top:16px;right:16px;width:44px;height:44px;border:none;border-radius:calc(44px * .5);background-color:transparent;background-image:url(../img/material-icon-close.svg);background-position:center center;background-size:80%;background-repeat:no-repeat}#container #search-block #single-gian-block #single-gian-content #single-gian-button-close:hover{cursor:pointer;background-color:rgba(0,0,0,.1)}#container #search-block #single-gian-block #single-gian-content #single-gian-content-inner h3{font-weight:700;font-size:16px;margin-bottom:16px}#container #search-block #single-gian-block #single-gian-content #single-gian-content-inner h4{margin-top:32px;font-weight:700;font-size:14px}#container #search-block #single-gian-block #single-gian-content #single-gian-content-inner ul{margin-top:16px}#container #search-block #single-gian-block #single-gian-content #single-gian-content-inner ul li{margin-top:8px;min-height:44px}#container #search-block #single-gian-block #single-gian-content #single-gian-content-inner ul li div:nth-child(1){font-size:13px;color:#aaa}#container #search-block #single-gian-block #single-gian-content #single-gian-content-inner ul li div:nth-child(2){font-size:15px;color:#333}#container #search-block #single-gian-block #single-gian-content #single-gian-content-inner ul.keika{margin-left:16px}#container #summary-block{width:calc(100% - 32px);max-width:960px;margin:0 auto}#container #summary-block article{margin-top:64px}#container #summary-block article h4{font-weight:700;font-size:16px}#container #summary-block article p{margin-top:4px;color:#999;font-size:14px}#container #summary-block article .mini-box{width:32px;height:1px}#container #summary-block article .echarts-tooltip span{font:15px/20px Roboto!important}#container #summary-block .chart-wrapper{margin-top:16px;width:100%;height:360px;overflow-y:scroll;overflow-x:hidden;position:relative}#container #switch-block #switch{position:fixed;width:calc(100vw - (16px * 2));max-width:360px;bottom:16px;left:16px;background-color:#fafafa;display:flex;border:none;height:42px;border-radius:21px;box-shadow:0 0 4px rgba(0,0,0,.3)}@media screen and (min-width:393px){#container #switch-block #switch{left:calc(50vw - (360px / 2))}}#container #switch-block #switch .switch-item{margin:1px;color:#999;width:50%;height:40px;border-radius:20px;font-size:16px;text-align:center;line-height:40px;padding-left:16px;background-repeat:no-repeat;background-position:32px calc(50%);background-size:28px}#container #switch-block #switch .switch-item:nth-child(1){background-image:url(../img/material-icon-chart.svg)}#container #switch-block #switch .switch-item:nth-child(2){background-position:24px calc(50% + 1px);background-image:url(../img/material-icon-search.svg)}#container #switch-block #switch .switch-item:hover{cursor:pointer;background-color:rgba(0,0,0,.1)}#container #switch-block #switch .switch-item.selected{background-color:#a32;color:#fefefe}#container #switch-block #switch .switch-item.selected:nth-child(1){background-image:url(../img/material-icon-chart-white.svg)}#container #switch-block #switch .switch-item.selected:nth-child(2){background-image:url(../img/material-icon-search-white.svg)}#container #search-block,#container #summary-block{display:none}#container #search-block.show,#container #summary-block.show{display:block}#container #footer-block{margin:0 auto;margin-top:64px;margin-bottom:96px;width:calc(100% - 32px);max-width:960px}#container #footer-block .box{width:100%;height:2px;margin:4px 0 16px 0}#container #footer-block .box-2{width:100%;height:1px;margin-top:64px}#container #footer-block p{font-size:14px;color:#666;margin-bottom:8px}#container #footer-block a.logo{display:block;width:240px;height:30px;margin:0 auto;margin-top:32px;background-image:url(../img/smri-logo.svg);background-size:cover;background-position:center center;background-repeat:no-repeat}#container #footer-block #social-buttons{width:fit-content;margin:64px auto 64px auto}#container #footer-block #social-buttons .social-button{display:inline-block}#container #footer-block #social-buttons .social-button a{display:block;margin:0 8px;width:48px;height:48px;border:1px solid #fefefe;border-radius:50%;background-size:contain;background-position:center center;background-repeat:no-repeat;z-index:10}#container #footer-block #social-buttons .social-button a.facebook{background-image:url(../img/social-icon-facebook.svg)}#container #footer-block #social-buttons .social-button a.twitter{background-image:url(../img/social-icon-twitter.svg)}#container #footer-block #social-buttons .social-button a.line{background-image:url(../img/social-icon-line.png)}#container #footer-block #social-buttons .social-button a.copy{background-image:url(../img/social-icon-copy.svg);background-color:#999;background-size:65%}#container #footer-block #social-buttons .social-button div{margin-top:4px;color:#999;font-size:12px;text-align:center}#container #footer-block #social-buttons .social-button div.text-copy:before{content:"Copy"}#container #footer-block #social-buttons .social-button div.text-copy.copied{color:#a32}#container #footer-block #social-buttons .social-button div.text-copy.copied:before{content:"Copied!"}#container #footer-block #social-buttons .margin{display:table-cell;width:24px}body.single-gian-show{overflow-y:hidden}body.single-gian-show #single-gian-cover{background-color:rgba(0,0,0,.7)!important;pointer-events:auto!important}body.single-gian-show #single-gian-content{right:0!important} -------------------------------------------------------------------------------- /css/style.scss: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | 3 | @import url('https://fonts.cdnfonts.com/css/roboto'); 4 | 5 | $mobile-max-width: 428px; 6 | 7 | 8 | 9 | 10 | * { 11 | margin: 0; 12 | padding: 0; 13 | outline: none; 14 | box-sizing: border-box; 15 | font-family: 'Roboto', -apple-system, BlinkMacSystemFont, '游ゴシック体', YuGothic, 'Yu Gothic Medium', 'Noto Sans JP', sans-serif; 16 | color: inherit; 17 | font-size: inherit; 18 | font-weight: inherit; 19 | letter-spacing: 0.03em; 20 | } 21 | 22 | body { 23 | width: 100%; 24 | background-color: #edeff0; 25 | overflow-y: scroll; 26 | color: #333; 27 | font-size: 16px; 28 | font-weight: normal; 29 | 30 | a { 31 | color: inherit; 32 | } 33 | 34 | hr { 35 | border: none; 36 | border-bottom: 1px solid #ccc; 37 | margin-top: 32px; 38 | margin-bottom: 32px; 39 | } 40 | 41 | ul { 42 | list-style-type: none; 43 | padding: 0; 44 | margin: 0; 45 | } 46 | 47 | input,textarea,select { 48 | font-size: 16px; 49 | padding: 8px 20px; 50 | border: 1px solid #fff; 51 | border-radius: 20px; 52 | background-color: #fefefe; 53 | 54 | &:focus { 55 | animation: shadow 2s linear 0s infinite forwards; 56 | 57 | @keyframes shadow { 58 | 0%, 59 | 100% { 60 | box-shadow: 0px 0px 4px #03fccf; 61 | } 62 | 50% { 63 | box-shadow: 0px 0px 4px #98b5ac; 64 | } 65 | } 66 | } 67 | } 68 | 69 | select { 70 | appearance: none; 71 | background-image: url(../img/material-icon-arrow-down.svg); 72 | background-repeat: no-repeat; 73 | background-position: calc(100% - 10px) calc(50% + 1px); 74 | padding: 8px 48px 8px 20px; 75 | } 76 | 77 | .sn-color { 78 | background: linear-gradient(90deg,#ff645b,#ff645b 25%,#ffc73d 0,#ffc73d 50%,#54e470 0,#54e470 75%,#0fbbe7 0,#0fbbe7); 79 | } 80 | 81 | h2 { 82 | margin-top: 32px; 83 | font-size: 20px; 84 | padding-left: 24px; 85 | position: relative; 86 | 87 | .icon { 88 | width: 22px; 89 | height: 22px; 90 | background-repeat: no-repeat; 91 | background-position: center center; 92 | background-size: contain; 93 | position: absolute; 94 | top: 4px; 95 | left: 0; 96 | 97 | &.info {background-image: url(../img/material-icon-info.svg);} 98 | &.chart {background-image: url(../img/material-icon-chart.svg);} 99 | &.search {background-image: url(../img/material-icon-search.svg);} 100 | } 101 | } 102 | 103 | .box { 104 | margin-top: 4px; 105 | width: 100%; 106 | height: 2px; 107 | } 108 | 109 | .block-description { 110 | font-size: 14px; 111 | color: #999; 112 | } 113 | } 114 | 115 | 116 | #cover { 117 | position: fixed; 118 | width: 100%; 119 | height: 100%; 120 | top: 0; 121 | left: 0; 122 | background-color: #f6f6f6; 123 | z-index: 1000; 124 | 125 | div { 126 | position: fixed; 127 | width: 100%; 128 | top: 50%; 129 | left: 50%; 130 | transform: translate(-50%, -50%); 131 | text-align: center; 132 | 133 | p { 134 | margin-top: 16px; 135 | font-size: 13px; 136 | line-height: 24px; 137 | } 138 | 139 | img { 140 | display: block; 141 | margin: 0 auto; 142 | width: 120px; 143 | height: 45.2814px; 144 | } 145 | } 146 | } 147 | 148 | #container { 149 | overflow-x: hidden; 150 | 151 | #title-block { 152 | width: 100%; 153 | //background: linear-gradient(220.55deg, #FF3F3F 0%, #063CFF 100%); 154 | background-color: #fefefe; 155 | 156 | #title-inner { 157 | width: calc(100% - 32px); 158 | max-width: 960px; 159 | margin: 0 auto; 160 | padding: 64px 0; 161 | 162 | h3 { 163 | margin: 0; 164 | margin-top: 8px; 165 | font-size: 15px; 166 | color: #999; 167 | } 168 | 169 | h1 { 170 | margin-top: 8px; 171 | font-size: 24px; 172 | font-weight: bold; 173 | color: #222; 174 | 175 | @media only screen and (min-width: 400px) { 176 | font-size: 26px; 177 | } 178 | 179 | @media only screen and (min-width: 700px) { 180 | font-size: 28px; 181 | } 182 | } 183 | 184 | .box { 185 | width: 64px; 186 | height: 8px; 187 | margin-left: 2px; 188 | } 189 | 190 | p { 191 | margin-top: 8px; 192 | font-size: 14px; 193 | line-height: 26px; 194 | color: #666; 195 | 196 | @media only screen and (min-width: 400px) { 197 | font-size: 15px; 198 | } 199 | 200 | @media only screen and (min-width: 700px) { 201 | font-size: 16px; 202 | } 203 | } 204 | } 205 | } 206 | 207 | #search-block { 208 | width: calc(100% - 32px); 209 | max-width: 960px; 210 | margin: 0 auto; 211 | 212 | #form-block { 213 | .control { 214 | margin-top: 16px; 215 | 216 | .label { 217 | font-size: 14px; 218 | color: #333; 219 | } 220 | 221 | input,select { 222 | margin-top: 4px; 223 | } 224 | 225 | button { 226 | margin-top: 32px; 227 | display: block; 228 | width: 108px; 229 | height: 36px; 230 | color: #fefefe; 231 | background-color: #369; 232 | background-image: url(../img/material-icon-search-white.svg); 233 | background-position: 16px calc(50% + 1px); 234 | background-size: 24px; 235 | background-repeat: no-repeat; 236 | border-radius: 20px; 237 | border: none; 238 | box-shadow: 1px 0 2px rgba(0, 0, 0, 0.2); 239 | padding-left: 12px; 240 | 241 | &:hover { 242 | cursor: pointer; 243 | opacity: 0.7; 244 | } 245 | } 246 | 247 | #input-gian-title { 248 | width: 100%; 249 | max-width: 640px; 250 | } 251 | 252 | .control-note { 253 | font-size: 13px; 254 | color: #999; 255 | margin-top: 4px; 256 | } 257 | } 258 | 259 | .box { 260 | width: 100%; 261 | height: 1px; 262 | margin: 32px 0; 263 | } 264 | } 265 | 266 | #result-block { 267 | width: 100%; 268 | max-width: 960px; 269 | margin: 0 auto; 270 | 271 | #result-number { 272 | color: #666; 273 | font-size: 14px; 274 | } 275 | 276 | #download-result { 277 | display: inline-block; 278 | margin-top: 4px; 279 | font-size: 14px; 280 | } 281 | 282 | #ul-gian-list { 283 | margin-top: 16px; 284 | 285 | li { 286 | border-top: 1px solid #ddd; 287 | padding: 8px 0; 288 | 289 | div:nth-child(1) { 290 | font-size: 13px; 291 | color: #932; 292 | 293 | span { 294 | color: #369; 295 | } 296 | } 297 | 298 | div:nth-child(2) { 299 | margin-top: 4px; 300 | font-size: 15px; 301 | font-weight: bold; 302 | height: 44px; 303 | overflow: hidden; 304 | } 305 | 306 | div:nth-child(3) { 307 | margin-top: 4px; 308 | font-size: 13px; 309 | color: #888; 310 | } 311 | 312 | &:last-child { 313 | border-bottom: 1px solid #ddd; 314 | } 315 | 316 | &:hover { 317 | background-color: #fefef6; 318 | cursor: pointer; 319 | } 320 | } 321 | } 322 | } 323 | 324 | #single-gian-block { 325 | #single-gian-cover { 326 | position: fixed; 327 | top: 0; 328 | left: 0; 329 | width: 100vw; 330 | height: 100vh; 331 | z-index: 100; 332 | background-color: rgba(0, 0, 0, 0); 333 | pointer-events: none; 334 | transition: all ease 250ms; 335 | } 336 | 337 | #single-gian-content { 338 | position: fixed; 339 | top: 0; 340 | right: calc(#{$mobile-max-width} * -1); 341 | height: 100vh; 342 | overflow-y: scroll; 343 | width: calc(100% - 32px); 344 | max-width: $mobile-max-width; 345 | background-color: #fcfcfc; 346 | z-index: 200; 347 | padding: 16px; 348 | padding-top: 64px; 349 | transition: all ease 250ms; 350 | 351 | #single-gian-button-close { 352 | $size: 44px; 353 | position: absolute; 354 | top: 16px; 355 | right: 16px; 356 | width: $size; 357 | height: $size; 358 | border: none; 359 | border-radius: calc(#{$size} * 0.5); 360 | background-color: transparent; 361 | background-image: url('../img/material-icon-close.svg'); 362 | background-position: center center; 363 | background-size: 80%; 364 | background-repeat: no-repeat; 365 | 366 | &:hover { 367 | cursor: pointer; 368 | background-color: rgba(0, 0, 0, 0.1); 369 | } 370 | } 371 | 372 | #single-gian-content-inner { 373 | 374 | h3 { 375 | font-weight: bold; 376 | font-size: 16px; 377 | margin-bottom: 16px; 378 | } 379 | 380 | h4 { 381 | margin-top: 32px; 382 | font-weight: bold; 383 | font-size: 14px; 384 | } 385 | 386 | ul { 387 | margin-top: 16px; 388 | 389 | li { 390 | margin-top: 8px; 391 | min-height: 44px; 392 | 393 | div:nth-child(1) { 394 | font-size: 13px; 395 | color: #aaa; 396 | } 397 | 398 | div:nth-child(2) { 399 | font-size: 15px; 400 | color: #333; 401 | } 402 | } 403 | 404 | &.keika { 405 | margin-left: 16px; 406 | } 407 | } 408 | } 409 | } 410 | } 411 | } 412 | 413 | #summary-block { 414 | width: calc(100% - 32px); 415 | max-width: 960px; 416 | margin: 0 auto; 417 | 418 | article { 419 | margin-top: 64px; 420 | 421 | h4 { 422 | font-weight: bold; 423 | font-size: 16px; 424 | } 425 | 426 | p { 427 | margin-top: 4px; 428 | color: #999; 429 | font-size: 14px; 430 | } 431 | 432 | .mini-box { 433 | width: 32px; 434 | height: 1px; 435 | } 436 | 437 | .echarts-tooltip { 438 | span { 439 | font: 15px / 20px "Roboto" !important; 440 | } 441 | } 442 | } 443 | 444 | .chart-wrapper { 445 | margin-top: 16px; 446 | width: 100%; 447 | height: 360px; 448 | overflow-y: scroll; 449 | overflow-x: hidden; 450 | position: relative; 451 | 452 | canvas { 453 | //margin-top: -40px !important; 454 | } 455 | } 456 | } 457 | 458 | #switch-block { 459 | #switch { 460 | $max-switch-width: 360px; 461 | $switch-margin: 16px; 462 | 463 | position: fixed; 464 | width: calc(100vw - (#{$switch-margin} * 2)); 465 | max-width: $max-switch-width; 466 | bottom: $switch-margin; 467 | left: $switch-margin; 468 | background-color: #fafafa; 469 | display: flex; 470 | border: none; 471 | height: 42px; 472 | border-radius: 21px; 473 | box-shadow: 0px 0px 4px rgba(0, 0, 0, 0.3); 474 | 475 | @media screen and (min-width: ($max-switch-width + ($switch-margin * 2) + 1)){ 476 | left: calc(50vw - (#{$max-switch-width} / 2)); 477 | } 478 | 479 | .switch-item { 480 | margin: 1px; 481 | color: #999; 482 | width: 50%; 483 | height: 40px; 484 | border-radius: 20px; 485 | font-size: 16px; 486 | text-align: center; 487 | line-height: 40px; 488 | padding-left: 16px; 489 | background-repeat: no-repeat; 490 | background-position: 32px calc(50%); 491 | background-size: 28px; 492 | 493 | &:nth-child(1) { 494 | background-image: url(../img/material-icon-chart.svg); 495 | } 496 | 497 | &:nth-child(2) { 498 | background-position: 24px calc(50% + 1px); 499 | background-image: url(../img/material-icon-search.svg); 500 | } 501 | 502 | &:hover { 503 | cursor: pointer; 504 | background-color: rgba(0, 0, 0, 0.1); 505 | } 506 | 507 | &.selected { 508 | background-color: #a32; 509 | color: #fefefe; 510 | 511 | &:nth-child(1) { 512 | background-image: url(../img/material-icon-chart-white.svg); 513 | } 514 | 515 | &:nth-child(2) { 516 | background-image: url(../img/material-icon-search-white.svg); 517 | } 518 | } 519 | } 520 | } 521 | } 522 | 523 | #summary-block,#search-block { 524 | display: none; 525 | 526 | &.show { 527 | display: block; 528 | } 529 | } 530 | 531 | #footer-block { 532 | margin: 0 auto; 533 | margin-top: 64px; 534 | margin-bottom: 96px; 535 | width: calc(100% - 32px); 536 | max-width: 960px; 537 | 538 | .box { 539 | width: 100%; 540 | height: 2px; 541 | margin: 4px 0 16px 0; 542 | } 543 | 544 | .box-2 { 545 | width: 100%; 546 | height: 1px; 547 | margin-top: 64px; 548 | } 549 | 550 | p { 551 | font-size: 14px; 552 | color: #666; 553 | margin-bottom: 8px; 554 | } 555 | 556 | a.logo { 557 | display: block; 558 | width: 240px; 559 | height: 30px; 560 | margin: 0 auto; 561 | margin-top: 32px; 562 | background-image: url(../img/smri-logo.svg); 563 | background-size: cover; 564 | background-position: center center; 565 | background-repeat: no-repeat; 566 | } 567 | 568 | #social-buttons { 569 | width: fit-content; 570 | margin: 64px auto 64px auto; 571 | 572 | .social-button { 573 | display: inline-block; 574 | 575 | a { 576 | display: block; 577 | margin: 0 8px; 578 | width: 48px; 579 | height: 48px; 580 | border: 1px solid #fefefe; 581 | border-radius: 50%; 582 | background-size: contain; 583 | background-position: center center; 584 | background-repeat: no-repeat; 585 | z-index: 10; 586 | 587 | &.facebook {background-image:url(../img/social-icon-facebook.svg);} 588 | &.twitter {background-image:url(../img/social-icon-twitter.svg);} 589 | &.line {background-image:url(../img/social-icon-line.png);} 590 | &.copy {background-image:url(../img/social-icon-copy.svg); 591 | background-color: #999; 592 | background-size: 65%; 593 | } 594 | } 595 | 596 | div { 597 | margin-top: 4px; 598 | color: #999; 599 | font-size: 12px; 600 | text-align: center; 601 | 602 | &.text-copy { 603 | &:before { 604 | content: "Copy"; 605 | } 606 | 607 | &.copied { 608 | color: #a32; 609 | 610 | &:before { 611 | content: "Copied!"; 612 | } 613 | } 614 | } 615 | } 616 | } 617 | 618 | .margin { 619 | display: table-cell; 620 | width: 24px; 621 | } 622 | } 623 | } 624 | } 625 | 626 | body.single-gian-show { 627 | overflow-y: hidden; 628 | 629 | #single-gian-cover { 630 | background-color: rgba(0, 0, 0, 0.7) !important; 631 | pointer-events: auto !important; 632 | } 633 | 634 | #single-gian-content { 635 | right: 0px !important; 636 | } 637 | } 638 | -------------------------------------------------------------------------------- /data/gian_status.csv: -------------------------------------------------------------------------------- 1 | Code,Value 2 | A,成立 3 | B,本院議了 4 | C,衆議院で閉会中審査 5 | D,撤回 6 | E,未了 7 | F,参議院回付案(同意) 8 | G,両院承認 9 | H,本院可決 10 | I,両院議決 11 | J,参議院で閉会中審査 12 | K,中間報告 13 | L,参議院議了 14 | M,両院の意見が一致しない旨報告 15 | N,両院承諾 16 | O,閉会中審査 17 | P,議決不要 18 | Q,衆議院で併合修正 19 | R,衆議院議決案(可決) 20 | S,衆議院回付案(同意) 21 | T,承認 22 | U,承諾なし 23 | V,参議院回付案(不同意) 24 | W,衆議院回付案(同意) 25 | X,撤回承諾 26 | Y,修正承諾 27 | Z,本院修正議決 28 | AA,衆議院で審議中 29 | AC,参議院で審議中 -------------------------------------------------------------------------------- /data/gian_status.json: -------------------------------------------------------------------------------- 1 | {"A":"成立","B":"本院議了","C":"衆議院で閉会中審査","D":"撤回","E":"未了","F":"参議院回付案(同意)","G":"両院承認","H":"本院可決","I":"両院議決","J":"参議院で閉会中審査","K":"中間報告","L":"参議院議了","M":"両院の意見が一致しない旨報告","N":"両院承諾","O":"閉会中審査","P":"議決不要","Q":"衆議院で併合修正","R":"衆議院議決案(可決)","S":"衆議院回付案(同意) ","T":"承認","U":"承諾なし","V":"参議院回付案(不同意)","W":"衆議院回付案(同意)","X":"撤回承諾","Y":"修正承諾","Z":"本院修正議決","AA":"衆議院で審議中","AC":"参議院で審議中"} -------------------------------------------------------------------------------- /data/gian_type.csv: -------------------------------------------------------------------------------- 1 | Code,Value 2 | A,衆法 3 | B,参法 4 | C,閣法 5 | D,予算 6 | E,条約 7 | F,承認 8 | G,承諾 9 | H,決算 10 | I,国有財産 11 | J,NHK決算 12 | K,決議 13 | L,規則 14 | M,規程 15 | N,議決 16 | O,国庫債務 17 | P,憲法八条議決案 -------------------------------------------------------------------------------- /data/gian_type.json: -------------------------------------------------------------------------------- 1 | {"A":"衆法","B":"参法","C":"閣法","D":"予算","E":"条約","F":"承認","G":"承諾","H":"決算","I":"国有財産","J":"NHK決算","K":"決議","L":"規則","M":"規程","N":"議決","O":"国庫債務","P":"憲法八条議決案"} -------------------------------------------------------------------------------- /data/updatetime.json: -------------------------------------------------------------------------------- 1 | {"file_update": "2025-06-04 14:08:44"} -------------------------------------------------------------------------------- /img/image_1200_630.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smartnews-smri/house-of-representatives/d8af15aa945568d85869af2cc3b512ba95f1008a/img/image_1200_630.png -------------------------------------------------------------------------------- /img/image_1280_640.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smartnews-smri/house-of-representatives/d8af15aa945568d85869af2cc3b512ba95f1008a/img/image_1280_640.png -------------------------------------------------------------------------------- /img/material-icon-arrow-down.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /img/material-icon-chart-white.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /img/material-icon-chart.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /img/material-icon-close.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /img/material-icon-download.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /img/material-icon-info.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /img/material-icon-openinnew.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /img/material-icon-search-white.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /img/material-icon-search.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /img/smri-logo.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /img/social-icon-copy.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /img/social-icon-facebook.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /img/social-icon-line.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smartnews-smri/house-of-representatives/d8af15aa945568d85869af2cc3b512ba95f1008a/img/social-icon-line.png -------------------------------------------------------------------------------- /img/social-icon-twitter.svg: -------------------------------------------------------------------------------- 1 | Twitter_Logo_White-on-Blue -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 国会議案データベース:衆議院 - スマートニュース メディア研究所 15 | 16 | 17 | 18 | 19 |
20 |
21 |

データを読み込んでいます…

22 |

表示されない場合は
ページを更新してください。

23 |
24 |
25 |
26 |
27 |
28 |
29 |

スマートニュース メディア研究所

30 |

国会議案データベース:衆議院

31 |

衆議院の公式ウェブサイトから国会に提出された議案をデータベース化しました。このページではデータの検索やダウンロードができます。参議院のデータベースはこちら

32 |
33 |
34 |
35 |

集計情報

36 |

審議状況や政党別賛否など項目別の集計データを表示します。

37 |
38 |
39 |

審議状況

40 |

議案ごとの審議状況。途中経過は含まず、それぞれの議案について最新分のみ集計

41 |
42 |
43 |
44 |
45 |
46 |

委員会

47 |

議案が審議された委員会。「衆議院付託委員会」を集計

48 |
49 |
50 |
51 |
52 |
53 |

議案提出者

54 |

議案の提出者。内閣、各委員長、国会議員による立法がある。5件以上のみ掲載

55 |
56 |
57 |
58 |
59 |
60 |

政党別の賛否

61 |

議案に対する政党(会派)別の賛成・反対。主な政党をまとめている。たとえば「自由民主党・無所属の会」とあれば「自由民主党」に数えている。

62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |

議案検索

70 |

議案の件名や提出者名、賛成・反対の政党別に議案を検索

71 |
72 |
73 | 113 |
114 |
115 |
116 |

117 | 118 |
    119 |
    120 |
    121 |
    122 |
    123 | 124 |
    125 |

    126 |
      127 |
      128 |
      129 |
      130 |
      131 |
      132 |
      133 |
      134 |
      集計情報
      135 |
      議案検索
      136 |
      137 |
      138 | 169 |
      170 | 171 | 172 | 173 | 174 | 175 | -------------------------------------------------------------------------------- /js/script.js: -------------------------------------------------------------------------------- 1 | let data = {}; 2 | let charts = {}; 3 | let gResults = []; 4 | 5 | const init = () => { 6 | 7 | const HEADERS = [ 8 | "議案種類", 9 | "提出回次", 10 | "番号", 11 | "議案件名", 12 | "審議回次", 13 | "審議状況", 14 | "議案提出者", 15 | "議案提出会派", 16 | "議案提出者一覧", 17 | "議案提出の賛成者" 18 | ]; 19 | 20 | const KEIKA_HEADERS = [ 21 | "審議回次", 22 | "審議状況", 23 | "経過情報", 24 | "経過情報URL", 25 | "本文情報", 26 | "本文情報URL", 27 | "議案種類", 28 | "衆議院予備審査議案受理年月日", 29 | "衆議院予備付託年月日/衆議院予備付託委員会", 30 | "衆議院議案受理年月日", 31 | "衆議院付託年月日/衆議院付託委員会", 32 | "衆議院審査終了年月日/衆議院審査結果", 33 | "衆議院審議終了年月日/衆議院審議結果", 34 | "衆議院審議時会派態度", 35 | "衆議院審議時賛成会派", 36 | "衆議院審議時反対会派", 37 | "参議院予備審査議案受理年月日", 38 | "参議院予備付託年月日/参議院予備付託委員会", 39 | "参議院議案受理年月日", 40 | "参議院付託年月日/参議院付託委員会", 41 | "参議院審査終了年月日/参議院審査結果", 42 | "参議院審議終了年月日/参議院審議結果", 43 | "公布年月日/法律番号" 44 | ]; 45 | 46 | const KEYWORDS = [ 47 | "ロシア","東日本大震災","新型コロナ","消費税","年金","エネルギー","学校","復興","ウイルス","銀行","郵政","脱税","アメリカ","土地","海上","図書館","関税","大学","子ども","憲法","高齢","漁業","東京","衛生","食品","建築","保育","電波","住宅","科学","証券","沖縄","家族","検察","農林","祝日","燃料","農地","土砂","輸出","スポーツ","国土","教職員","警備","預金","貯金","北海道","鉄道","青少年","インフルエンザ","消防","港湾","医薬","家畜","インド","オリンピック","畜産","患者","テロ","牛肉","鳥獣","衛星","インターネット","扶養","子育て","駐留","パラリンピック","種子" 48 | ]; 49 | 50 | const PARTIES = [ 51 | ["自由民主党","立憲民主党","日本維新の会","公明党","国民民主党","日本共産党","れいわ新選組"], 52 | ["民主党","社会民主党","自由党","希望の党","民進党","生活の党"] 53 | ]; 54 | 55 | const addCommas = (num) => { 56 | return String(num).replace( /(\d)(?=(\d\d\d)+(?!\d))/g, '$1,'); 57 | } 58 | 59 | const loadData = () => { 60 | 61 | const showData = () => { 62 | 63 | const getParams = (array, dom_id) => { 64 | 65 | // Sort ascending 66 | let array2 = Object.keys(array).map((k)=>({key: k, value: array[k]})); 67 | array2.sort((a, b) => a.value - b.value); 68 | array = Object.assign({}, ...array2.map((item) => ({ 69 | [item.key]: item.value, 70 | }))); 71 | 72 | config_data = []; 73 | config_labels = []; 74 | 75 | for (let key in array) { 76 | config_data.push(array[key]); 77 | config_labels.push(key); 78 | } 79 | 80 | const params = { 81 | domid: dom_id, 82 | labels: config_labels, 83 | datasets: [{ 84 | name: '', 85 | data: config_data 86 | }] 87 | }; 88 | 89 | return params; 90 | } 91 | 92 | const drawChart = (params) => { 93 | const $wrapper = $("#" + params.domid); 94 | const $inner = $wrapper.find(".inner")[0]; 95 | 96 | $inner.style.height = 20 + (params.datasets[0].data.length * 20) + "px"; 97 | if (params.domid === "summary-chart-foragainst") $inner.style.height = parseInt($inner.style.height.replace("px", "")) * 1.2 + "px"; 98 | 99 | const myChart = echarts.init($inner); 100 | let option = { 101 | legend: { 102 | show: ((params.datasets.length >= 2) ? true: false) 103 | }, 104 | grid: { 105 | top: ((params.datasets.length >= 2) ? '40px': '0'), 106 | left: '3%', 107 | right: '6%', 108 | bottom: '3%', 109 | containLabel: true 110 | }, 111 | tooltip: { 112 | show: true, 113 | trigger: 'axis', 114 | axisPointer: { 115 | type: 'shadow' 116 | }, 117 | alwaysShowContent: true, 118 | className: 'echarts-tooltip', 119 | backgroundColor: 'rgba(0, 0, 0, 0.6)', 120 | borderWidth: 0, 121 | padding: [8, 16], 122 | textStyle: { 123 | color: "#fefefe", 124 | fontSize: 13, 125 | fontFamily: "Roboto" 126 | }, 127 | formatter: ((d) => { 128 | //console.log(d); 129 | let title = params.labels[d[0].dataIndex]; 130 | if ((params.domid === "summary-chart-committee") 131 | && (title.substr(-3) !== "審査会") 132 | && (title !== "審査省略要求") 133 | ) { 134 | title += "委員会"; 135 | } 136 | let value = addCommas(d[0].value); 137 | 138 | let ret = title; 139 | d.map((r, i) => { 140 | let prefix = (params.datasets[i].name !== "") ? params.datasets[i].name + ":": ""; 141 | ret += "
      " + prefix + "" + addCommas(r.value) + " 件"; 142 | if (params.domid === "summary-chart-foragainst") { 143 | const total = d.reduce((g, e) => g + e.value, 0); 144 | ret += "(" + ((r.value * 100) / total).toFixed(1) + "%)" 145 | } 146 | }); 147 | return ret; 148 | }) 149 | }, 150 | xAxis: { 151 | type: 'value', 152 | position: 'top', 153 | splitNumber: 4, 154 | splitLine: { 155 | show: true, 156 | lineStyle: { 157 | color: '#ccc', 158 | //miterLimit: 2 159 | } 160 | }, 161 | axisLabel: { 162 | fontFamily: "Roboto", 163 | formatter: ((d) => { 164 | return addCommas(d); 165 | }) 166 | } 167 | }, 168 | yAxis: { 169 | type: 'category', 170 | data: params.labels.map((label) => { 171 | const MAX_LABEL_LENGTH = 8; 172 | let ret = label; 173 | if (label.length >= MAX_LABEL_LENGTH) ret = label.slice(0, MAX_LABEL_LENGTH - 1) + "…"; 174 | return ret; 175 | }) 176 | }, 177 | series: [] 178 | }; 179 | 180 | params.datasets.map((dataset, i) => { 181 | option.series.push({ 182 | name: dataset.name, 183 | type: 'bar', 184 | stack: 'total', 185 | label: { 186 | show: (params.datasets.length === 1) ? true: false, 187 | position: "right", 188 | textBorderColor: "#fff", 189 | textBorderWidth: 0, 190 | color: "#47a", 191 | fontFamily: "Roboto", 192 | formatter: ((d) => { 193 | return addCommas(d.data); 194 | }) 195 | }, 196 | itemStyle: { 197 | color: (i === 0) ? "#47a": "#f5d25f" 198 | }, 199 | data: dataset.data 200 | }); 201 | }); 202 | 203 | myChart.setOption(option); 204 | } 205 | 206 | const updateSelectBox = (file_name, select_id) => { 207 | const $select = $("#" + select_id); 208 | for (let key in data[file_name]) { 209 | const option = ''; 210 | $select.append(option); 211 | } 212 | } 213 | 214 | const updateSelectBoxParties = (select_id) => { 215 | const $select = $("#" + select_id); 216 | 217 | PARTIES.map((ps, i) => { 218 | const grouplabel = ["現在の主な政党", "過去の主な政党"][i]; 219 | $select.append(''); 220 | ps.map(party => { 221 | const option = ''; 222 | $select.find("optgroup:last").append(option); 223 | }); 224 | }); 225 | } 226 | 227 | const showLatestStatus = () => { 228 | let statuses = {}; 229 | 230 | data.gian_summary.map(gian => { 231 | const status = gian[5]; 232 | if (status !== "") { 233 | if (!statuses[status]) { 234 | statuses[status] = 0; 235 | } 236 | statuses[status] += 1; 237 | } 238 | }); 239 | 240 | drawChart(getParams(statuses, 'summary-chart-status')); 241 | } 242 | 243 | const showCommittees = () => { 244 | let committees = {}; 245 | 246 | data.gian_summary.map(gian => { 247 | gian[10].map(info => { 248 | const cominfo = info[10]; 249 | if (cominfo.indexOf("/") !== -1) { 250 | const name = cominfo.split("/")[1]; 251 | if (name !== "" && name !== "審査省略") { 252 | if (!committees[name]) { 253 | committees[name] = 0; 254 | } 255 | committees[name] += 1; 256 | } 257 | } 258 | }); 259 | }); 260 | 261 | drawChart(getParams(committees, 'summary-chart-committee')); 262 | } 263 | 264 | const showSubmitters = () => { 265 | let submitters = {}; 266 | 267 | data.gian_summary.map(gian => { 268 | let name = gian[6]; 269 | 270 | if (name.indexOf("君外") !== -1) { 271 | name = name.split("君外")[0].replace(" ", " "); 272 | } 273 | 274 | if (name.slice(-1) === "君") { 275 | name = name.substr(0, -1).replace(" ", " "); 276 | } 277 | 278 | if (name !== "") { 279 | if (!submitters[name]) { 280 | submitters[name] = 0; 281 | } 282 | submitters[name] += 1; 283 | } 284 | }); 285 | 286 | let submitters2 = {}; 287 | for (let key in submitters) { 288 | const s = submitters[key]; 289 | if (s >= 5) submitters2[key] = s; 290 | } 291 | 292 | drawChart(getParams(submitters2, 'summary-chart-submitter')); 293 | } 294 | 295 | const showForAgainst = () => { 296 | let parties = {}; 297 | 298 | PARTIES.map((ps) => { 299 | ps.map((p) => { 300 | parties[p] = [0, 0]; 301 | }); 302 | }); 303 | 304 | data.gian_summary.map(gian => { 305 | gian[10].map(row => { 306 | if (row[14] != "") { 307 | [row[14], row[15]].map((fas, j) => { 308 | fas = fas.replaceAll("; ", "/"); 309 | fas = fas.replaceAll(";", "/"); 310 | fas = fas.replaceAll("・", "/"); 311 | fas.split("/").map((party) => { 312 | if (party in parties) { 313 | parties[party][j] += 1; 314 | } 315 | }); 316 | }); 317 | } 318 | }); 319 | }); 320 | 321 | let array2 = Object.keys(parties).map((k)=>({key: k, for: parties[k][0], agn: parties[k][1]})); 322 | array2.sort((a, b) => (a.for + a.agn) - (b.for + b.agn)); 323 | parties = Object.assign({}, ...array2.map((item) => ({ 324 | [item.key]: [item.for, item.agn], 325 | }))); 326 | 327 | config_data = [[],[]]; 328 | config_labels = []; 329 | 330 | for (let key in parties) { 331 | config_data[0].push(parties[key][0]); 332 | config_data[1].push(parties[key][1]); 333 | config_labels.push(key); 334 | } 335 | //console.log(submitters); 336 | 337 | drawChart({ 338 | domid: 'summary-chart-foragainst', 339 | labels: config_labels, 340 | datasets: [{ 341 | name: '賛成', 342 | data: config_data[0] 343 | },{ 344 | name: '反対', 345 | data: config_data[1] 346 | }] 347 | }); 348 | } 349 | 350 | const updateKeywords = () => { 351 | const KEYWORDS_NUM = Math.min(KEYWORDS.length, 6); 352 | let copy = KEYWORDS.map(d => { 353 | return d; 354 | }); 355 | for (let i = 0; i < KEYWORDS_NUM; i++) { 356 | const j = Math.floor(Math.random() * (KEYWORDS.length - i)); // Between 0 and (KEYWORDS_NUM - 1) 357 | $("#keywords").append('' + copy[j] + '|'); 358 | copy.splice(j, 1); 359 | } 360 | 361 | $("#keywords").find("a").on("click", function(e){ 362 | e.preventDefault(); 363 | $("#input-gian-title").val($(this).text()); 364 | $("#form-gian-search").submit(); 365 | }); 366 | } 367 | 368 | updateSelectBox("gian_type", "select-gian-type"); 369 | updateSelectBox("gian_status", "select-gian-status"); 370 | updateSelectBoxParties("select-party-for"); 371 | updateSelectBoxParties("select-party-against"); 372 | 373 | showLatestStatus(); 374 | showCommittees(); 375 | showSubmitters(); 376 | showForAgainst(); 377 | 378 | updateKeywords(); 379 | 380 | $("#cover").fadeOut(); 381 | } 382 | 383 | const updateData = (updatetime) => { 384 | 385 | let count = 0; 386 | 387 | const targets = [ 388 | "updatetime", 389 | "gian_type", 390 | "gian_status", 391 | "gian_summary" 392 | ]; 393 | 394 | targets.map((target) => { 395 | $.getJSON("data/" + target + ".json", function(json){ 396 | data[target] = json; 397 | count++; 398 | if (count >= targets.length) { 399 | showData(); 400 | } 401 | }); 402 | }); 403 | } 404 | 405 | if (localStorage.getItem('smri-gian')) { 406 | data = localStorage.getItem('smri-gian'); 407 | $.getJSON("data/updatetime.json", function(updatetime){ 408 | let t1 = new Date(updatetime.file_update); 409 | let t2 = new Date(data.updatetime.file_update); 410 | if (t1 > t2) { 411 | updateData(); 412 | } else { 413 | showData(); 414 | } 415 | }); 416 | } else { 417 | updateData(); 418 | } 419 | } 420 | 421 | const showSingleGian = (index) => { 422 | const $inner = $("#single-gian-content-inner"); 423 | const $keika = $("#single-gian-content-keika").empty(); 424 | const gian = data.gian_summary[parseInt(index)]; 425 | 426 | $inner.find("h3").text(gian[3]); 427 | $("#ul-single-gian-items").empty(); 428 | 429 | [0,1,2,4,5,6,7,8,9].map(i => { 430 | const header = HEADERS[i]; 431 | const value = gian[i]; 432 | 433 | const li = '
    • ' 434 | + '
      ' + header + '
      ' 435 | + '
      ' + value + '
      ' 436 | + '
    • '; 437 | 438 | $("#ul-single-gian-items").append(li); 439 | }); 440 | 441 | gian[10].map(keika => { 442 | $keika.append('

      第' + keika[0] + '回の経過情報

      '); 443 | $keika.append(''); 444 | $ul = $keika.find('ul.keika:last'); 445 | 446 | for (let i = 1; i < keika.length; i++) { 447 | let value = keika[i]; 448 | 449 | if (i === 2 || i === 4) { 450 | const url = keika[i + 1]; 451 | if (url.slice(0, 8) === "https://") { 452 | value = '' + value + 'へのリンク'; 453 | } 454 | } else if (i === 3 || i === 5) { 455 | continue; 456 | } 457 | 458 | const li = '
    • ' 459 | + '
      ' + KEIKA_HEADERS[i] + '
      ' 460 | + '
      ' + value + '
      ' 461 | + '
    • '; 462 | 463 | $ul.append(li); 464 | } 465 | }); 466 | 467 | $("body").addClass("single-gian-show"); 468 | } 469 | 470 | const bindEvents = () => { 471 | 472 | const matchText = (input, haystack) => { 473 | 474 | const unifyString = (str) => { 475 | let ret = str; 476 | 477 | // Convert Hiragana into Katakana 478 | ret = str.replace(/[\u3041-\u3096]/g, function(match) { 479 | var chr = match.charCodeAt(0) + 0x60; 480 | return String.fromCharCode(chr); 481 | }); 482 | 483 | // Convert full-width characters into half-width 484 | ret = ret.replace(/[A-Za-z0-9]/g, function(s) { 485 | return String.fromCharCode(s.charCodeAt(0) - 0xFEE0); 486 | }); 487 | 488 | return ret; 489 | } 490 | 491 | input = unifyString(input); 492 | haystack = unifyString(haystack); 493 | 494 | const DELIMITERS = [" ", " ", ","]; 495 | const DELIMITER = "//"; 496 | 497 | DELIMITERS.map(d => { 498 | input = input.replace(d, DELIMITER); 499 | haystack = haystack.replace(d, ""); 500 | }); 501 | 502 | const words = input.split(DELIMITER); 503 | let match = true; 504 | 505 | words.map((w) => { 506 | if (haystack.indexOf(w) === -1) match = false; 507 | }); 508 | 509 | return match; 510 | } 511 | 512 | const matchParty = (input, haystack) => { 513 | if (input == "") return true; 514 | if (haystack == "") return false; 515 | haystack = haystack.replaceAll("・", "/"); 516 | haystack = haystack.replaceAll("; ", "/"); 517 | haystack = haystack.replaceAll(";", "/"); 518 | let ret = false; 519 | const parties = haystack.split("/"); 520 | if (parties.indexOf(input) !== -1) ret = true; 521 | return ret; 522 | } 523 | 524 | $("#form-gian-search").on("submit", function(e){ 525 | e.preventDefault(); 526 | $("#ul-gian-list").empty(); 527 | 528 | let gian_results = 0; 529 | let keika_results = 0; 530 | let type = $("#select-gian-type").find("option:selected").text(); 531 | let status = $("#select-gian-status").find("option:selected").text(); 532 | if (type === "指定なし") type = ""; 533 | if (status === "指定なし") status = ""; 534 | const title = $("#input-gian-title").val(); 535 | const submitter = $("#input-gian-submitter").val(); 536 | const party_f = $("#select-party-for").val(); 537 | const party_a = $("#select-party-against").val(); 538 | const MAX_RESULTS = 1000; 539 | gResults = []; 540 | 541 | for (let i = 0; i < data.gian_summary.length; i++) { 542 | const gian = data.gian_summary[i]; 543 | 544 | let hit = true; 545 | 546 | hit = matchText(title, gian[3]); 547 | 548 | if (!matchText(submitter, gian[6])) hit = false; 549 | if (gian[0].indexOf(type) === -1) hit = false; 550 | if (gian[5].indexOf(status) === -1) hit = false; 551 | 552 | gian[10].map(keika => { 553 | if (!matchParty(party_f, keika[14])) hit = false; 554 | if (!matchParty(party_a, keika[15])) hit = false; 555 | }); 556 | 557 | if (hit) { 558 | gian_results += 1; 559 | keika_results += gian[10].length; 560 | gResults.push(gian); 561 | 562 | if (gian_results <= MAX_RESULTS) { 563 | const li = '
    • ' 564 | + '
      第' + gian[4] + '回国会 ' + gian[5] + '
      ' 565 | + '
      ' + gian[3] + '
      ' 566 | + '
      提出:第' + gian[1] + '回国会|' + gian[0] + '
      ' 567 | + '
    • '; 568 | $("#ul-gian-list").append(li); 569 | } 570 | } 571 | } 572 | 573 | if (gian_results > MAX_RESULTS) { 574 | $("#result-number").text(addCommas(gian_results) + "件ヒットしました。" + addCommas(MAX_RESULTS) + "件までを表示しています。"); 575 | } else if (gian_results === 0) { 576 | $("#result-number").text("該当する議案がありませんでした。"); 577 | } else { 578 | $("#result-number").text(addCommas(gian_results) + "件ヒットしました。"); 579 | } 580 | 581 | if (gian_results === 0) { 582 | $("#download-result").text(""); 583 | } else { 584 | $("#download-result").text("検索結果(途中経過含め" + keika_results + "件)をCSVでダウンロードする"); 585 | } 586 | 587 | 588 | $("li").on("click", function(){ 589 | showSingleGian($(this).attr("index")); 590 | }); 591 | }); 592 | 593 | $("#single-gian-cover").on("click", function(){ 594 | $("body").removeClass("single-gian-show"); 595 | }); 596 | 597 | $("#single-gian-button-close").on("click", function(){ 598 | $("body").removeClass("single-gian-show"); 599 | }); 600 | 601 | $("#switch").find(".switch-item").on("click", function(){ 602 | if (!$(this).hasClass("selected")) { 603 | $(this).siblings(".switch-item").removeClass("selected"); 604 | $(this).addClass("selected"); 605 | 606 | $("#switch").find(".switch-item").each(function(){ 607 | let code = $(this).attr("code"); 608 | if ($(this).hasClass("selected")) { 609 | $("#" + code + "-block").addClass("show"); 610 | } else { 611 | $("#" + code + "-block").removeClass("show"); 612 | } 613 | 614 | $('body, html').scrollTop(0); 615 | }); 616 | } 617 | }); 618 | 619 | $("#download-result").on("click", function(e){ 620 | e.preventDefault(); 621 | 622 | const getResultsToArray = () => { 623 | let headers = HEADERS.concat(KEIKA_HEADERS); 624 | headers.splice(4, 2); 625 | let data = headers.join(",") + "\n"; 626 | 627 | gResults.map(row => { 628 | row[10].map((keikarow, i) => { 629 | data += [row[0], row[1], row[2], row[3], row[6], row[7], row[8], row[9]].join(",") + "," + keikarow.join(",") + "\n"; 630 | }); 631 | }); 632 | 633 | return data; 634 | } 635 | 636 | const now = new Date(); 637 | const y = now.getFullYear(); 638 | const m = now.getMonth()+1; 639 | const d = now.getDate(); 640 | const h = now.getHours(); 641 | const n = now.getMinutes(); 642 | const s = now.getSeconds(); 643 | const data = getResultsToArray(); 644 | const filename = "smri-house-of-representatives-" + y + m + d + h + n + s + ".csv"; 645 | const bom = new Uint8Array([0xef, 0xbb, 0xbf]); 646 | const blob = new Blob([bom, data], {type: "text/csv"}); 647 | 648 | if (window.navigator.msSaveBlob) { 649 | window.navigator.msSaveBlob(blob, filename); 650 | } else { 651 | const url = (window.URL || window.webkitURL).createObjectURL(blob); 652 | const d = document.createElement("a"); 653 | d.href = url; 654 | d.download = filename; 655 | d.click(); 656 | (window.URL || window.webkitURL).revokeObjectURL(url); 657 | } 658 | }); 659 | 660 | $("#social-button-copy").on("click", function(e){ 661 | e.preventDefault(); 662 | let text = "国会議案データベース - スマートニュース メディア研究所\nhttps://smartnews-smri.github.io/house-of-representatives/"; 663 | let $textarea = $(''); 664 | $textarea.text(text); 665 | $(this).append($textarea); 666 | $textarea.select(); 667 | document.execCommand('copy'); 668 | $textarea.remove(); 669 | let $copyText = $(this).next(".text-copy"); 670 | $copyText.addClass("copied"); 671 | 672 | setTimeout(function() { 673 | $copyText.removeClass("copied"); 674 | }, 3000); 675 | }); 676 | } 677 | 678 | loadData(); 679 | bindEvents(); 680 | } 681 | 682 | 683 | $(function(){ 684 | init(); 685 | }); 686 | -------------------------------------------------------------------------------- /js/script.min.js: -------------------------------------------------------------------------------- 1 | let data={},charts={},gResults=[];const init=()=>{const t=["議案種類","提出回次","番号","議案件名","審議回次","審議状況","議案提出者","議案提出会派","議案提出者一覧","議案提出の賛成者"],e=["審議回次","審議状況","経過情報","経過情報URL","本文情報","本文情報URL","議案種類","衆議院予備審査議案受理年月日","衆議院予備付託年月日/衆議院予備付託委員会","衆議院議案受理年月日","衆議院付託年月日/衆議院付託委員会","衆議院審査終了年月日/衆議院審査結果","衆議院審議終了年月日/衆議院審議結果","衆議院審議時会派態度","衆議院審議時賛成会派","衆議院審議時反対会派","参議院予備審査議案受理年月日","参議院予備付託年月日/参議院予備付託委員会","参議院議案受理年月日","参議院付託年月日/参議院付託委員会","参議院審査終了年月日/参議院審査結果","参議院審議終了年月日/参議院審議結果","公布年月日/法律番号"],a=["ロシア","東日本大震災","新型コロナ","消費税","年金","エネルギー","学校","復興","ウイルス","銀行","郵政","脱税","アメリカ","土地","海上","図書館","関税","大学","子ども","憲法","高齢","漁業","東京","衛生","食品","建築","保育","電波","住宅","科学","証券","沖縄","家族","検察","農林","祝日","燃料","農地","土砂","輸出","スポーツ","国土","教職員","警備","預金","貯金","北海道","鉄道","青少年","インフルエンザ","消防","港湾","医薬","家畜","インド","オリンピック","畜産","患者","テロ","牛肉","鳥獣","衛星","インターネット","扶養","子育て","駐留","パラリンピック","種子"],n=[["自由民主党","立憲民主党","日本維新の会","公明党","国民民主党","日本共産党","れいわ新選組"],["民主党","社会民主党","自由党","希望の党","民進党","生活の党"]],s=t=>String(t).replace(/(\d)(?=(\d\d\d)+(?!\d))/g,"$1,");(()=>{const t=()=>{const t=(t,e)=>{let a=Object.keys(t).map(e=>({key:e,value:t[e]}));a.sort((t,e)=>t.value-e.value),t=Object.assign({},...a.map(t=>({[t.key]:t.value}))),config_data=[],config_labels=[];for(let e in t)config_data.push(t[e]),config_labels.push(e);return{domid:e,labels:config_labels,datasets:[{name:"",data:config_data}]}},e=t=>{const e=$("#"+t.domid).find(".inner")[0];e.style.height=20+20*t.datasets[0].data.length+"px","summary-chart-foragainst"===t.domid&&(e.style.height=1.2*parseInt(e.style.height.replace("px",""))+"px");const a=echarts.init(e);let n={legend:{show:t.datasets.length>=2},grid:{top:t.datasets.length>=2?"40px":"0",left:"3%",right:"6%",bottom:"3%",containLabel:!0},tooltip:{show:!0,trigger:"axis",axisPointer:{type:"shadow"},alwaysShowContent:!0,className:"echarts-tooltip",backgroundColor:"rgba(0, 0, 0, 0.6)",borderWidth:0,padding:[8,16],textStyle:{color:"#fefefe",fontSize:13,fontFamily:"Roboto"},formatter:e=>{let a=t.labels[e[0].dataIndex];"summary-chart-committee"===t.domid&&"審査会"!==a.substr(-3)&&"審査省略要求"!==a&&(a+="委員会"),s(e[0].value);let n=a;return e.map((a,i)=>{let o=""!==t.datasets[i].name?t.datasets[i].name+":":"";if(n+="
      "+o+""+s(a.value)+" 件","summary-chart-foragainst"===t.domid){const t=e.reduce((t,e)=>t+e.value,0);n+="("+(100*a.value/t).toFixed(1)+"%)"}}),n}},xAxis:{type:"value",position:"top",splitNumber:4,splitLine:{show:!0,lineStyle:{color:"#ccc"}},axisLabel:{fontFamily:"Roboto",formatter:t=>s(t)}},yAxis:{type:"category",data:t.labels.map(t=>{let e=t;return t.length>=8&&(e=t.slice(0,7)+"…"),e})},series:[]};t.datasets.map((e,a)=>{n.series.push({name:e.name,type:"bar",stack:"total",label:{show:1===t.datasets.length,position:"right",textBorderColor:"#fff",textBorderWidth:0,color:"#47a",fontFamily:"Roboto",formatter:t=>s(t.data)},itemStyle:{color:0===a?"#47a":"#f5d25f"},data:e.data})}),a.setOption(n)},i=(t,e)=>{const a=$("#"+e);for(let e in data[t]){const n='";a.append(n)}},o=t=>{const e=$("#"+t);n.map((t,a)=>{const n=["現在の主な政党","過去の主な政党"][a];e.append(''),t.map(t=>{const a='";e.find("optgroup:last").append(a)})})};i("gian_type","select-gian-type"),i("gian_status","select-gian-status"),o("select-party-for"),o("select-party-against"),(()=>{let a={};data.gian_summary.map(t=>{const e=t[5];""!==e&&(a[e]||(a[e]=0),a[e]+=1)}),e(t(a,"summary-chart-status"))})(),(()=>{let a={};data.gian_summary.map(t=>{t[10].map(t=>{const e=t[10];if(-1!==e.indexOf("/")){const t=e.split("/")[1];""!==t&&"審査省略"!==t&&(a[t]||(a[t]=0),a[t]+=1)}})}),e(t(a,"summary-chart-committee"))})(),(()=>{let a={};data.gian_summary.map(t=>{let e=t[6];-1!==e.indexOf("君外")&&(e=e.split("君外")[0].replace(" "," ")),"君"===e.slice(-1)&&(e=e.substr(0,-1).replace(" "," ")),""!==e&&(a[e]||(a[e]=0),a[e]+=1)});let n={};for(let t in a){const e=a[t];e>=5&&(n[t]=e)}e(t(n,"summary-chart-submitter"))})(),(()=>{let t={};n.map(e=>{e.map(e=>{t[e]=[0,0]})}),data.gian_summary.map(e=>{e[10].map(e=>{""!=e[14]&&[e[14],e[15]].map((e,a)=>{(e=(e=(e=e.replaceAll("; ","/")).replaceAll(";","/")).replaceAll("・","/")).split("/").map(e=>{e in t&&(t[e][a]+=1)})})})});let a=Object.keys(t).map(e=>({key:e,for:t[e][0],agn:t[e][1]}));a.sort((t,e)=>t.for+t.agn-(e.for+e.agn)),t=Object.assign({},...a.map(t=>({[t.key]:[t.for,t.agn]}))),config_data=[[],[]],config_labels=[];for(let e in t)config_data[0].push(t[e][0]),config_data[1].push(t[e][1]),config_labels.push(e);e({domid:"summary-chart-foragainst",labels:config_labels,datasets:[{name:"賛成",data:config_data[0]},{name:"反対",data:config_data[1]}]})})(),(()=>{const t=Math.min(a.length,6);let e=a.map(t=>t);for(let n=0;n'+e[t]+"|"),e.splice(t,1)}$("#keywords").find("a").on("click",function(t){t.preventDefault(),$("#input-gian-title").val($(this).text()),$("#form-gian-search").submit()})})(),$("#cover").fadeOut()},e=e=>{let a=0;const n=["updatetime","gian_type","gian_status","gian_summary"];n.map(e=>{$.getJSON("data/"+e+".json",function(s){data[e]=s,++a>=n.length&&t()})})};localStorage.getItem("smri-gian")?(data=localStorage.getItem("smri-gian"),$.getJSON("data/updatetime.json",function(a){new Date(a.file_update)>new Date(data.updatetime.file_update)?e():t()})):e()})(),(()=>{const a=(t,e)=>{const a=t=>{let e=t;return e=t.replace(/[\u3041-\u3096]/g,function(t){var e=t.charCodeAt(0)+96;return String.fromCharCode(e)}),e=e.replace(/[A-Za-z0-9]/g,function(t){return String.fromCharCode(t.charCodeAt(0)-65248)})};t=a(t),e=a(e),[" "," ",","].map(a=>{t=t.replace(a,"//"),e=e.replace(a,"")});let n=!0;return t.split("//").map(t=>{-1===e.indexOf(t)&&(n=!1)}),n},n=(t,e)=>{if(""==t)return!0;if(""==e)return!1;let a=!1;return-1!==(e=(e=(e=e.replaceAll("・","/")).replaceAll("; ","/")).replaceAll(";","/")).split("/").indexOf(t)&&(a=!0),a};$("#form-gian-search").on("submit",function(i){i.preventDefault(),$("#ul-gian-list").empty();let o=0,l=0,r=$("#select-gian-type").find("option:selected").text(),c=$("#select-gian-status").find("option:selected").text();"指定なし"===r&&(r=""),"指定なし"===c&&(c="");const d=$("#input-gian-title").val(),p=$("#input-gian-submitter").val(),m=$("#select-party-for").val(),u=$("#select-party-against").val();gResults=[];for(let t=0;t{n(m,t[14])||(s=!1),n(u,t[15])||(s=!1)}),s&&(o+=1,l+=e[10].length,gResults.push(e),o<=1e3)){const a='
    • 第'+e[4]+"回国会 "+e[5]+"
      "+e[3]+"
      提出:第"+e[1]+"回国会|"+e[0]+"
    • ";$("#ul-gian-list").append(a)}}o>1e3?$("#result-number").text(s(o)+"件ヒットしました。"+s(1e3)+"件までを表示しています。"):0===o?$("#result-number").text("該当する議案がありませんでした。"):$("#result-number").text(s(o)+"件ヒットしました。"),0===o?$("#download-result").text(""):$("#download-result").text("検索結果(途中経過含め"+l+"件)をCSVでダウンロードする"),$("li").on("click",function(){(a=>{const n=$("#single-gian-content-inner"),s=$("#single-gian-content-keika").empty(),i=data.gian_summary[parseInt(a)];n.find("h3").text(i[3]),$("#ul-single-gian-items").empty(),[0,1,2,4,5,6,7,8,9].map(e=>{const a="
    • "+t[e]+"
      "+i[e]+"
    • ";$("#ul-single-gian-items").append(a)}),i[10].map(t=>{s.append("

      第"+t[0]+"回の経過情報

      "),s.append(''),$ul=s.find("ul.keika:last");for(let a=1;a'+n+"へのリンク")}else if(3===a||5===a)continue;const s="
    • "+e[a]+"
      "+n+"
    • ";$ul.append(s)}}),$("body").addClass("single-gian-show")})($(this).attr("index"))})}),$("#single-gian-cover").on("click",function(){$("body").removeClass("single-gian-show")}),$("#single-gian-button-close").on("click",function(){$("body").removeClass("single-gian-show")}),$("#switch").find(".switch-item").on("click",function(){$(this).hasClass("selected")||($(this).siblings(".switch-item").removeClass("selected"),$(this).addClass("selected"),$("#switch").find(".switch-item").each(function(){let t=$(this).attr("code");$(this).hasClass("selected")?$("#"+t+"-block").addClass("show"):$("#"+t+"-block").removeClass("show"),$("body, html").scrollTop(0)}))}),$("#download-result").on("click",function(a){a.preventDefault();const n=new Date,s=n.getFullYear(),i=n.getMonth()+1,o=n.getDate(),l=n.getHours(),r=n.getMinutes(),c=n.getSeconds(),d=(()=>{let a=t.concat(e);a.splice(4,2);let n=a.join(",")+"\n";return gResults.map(t=>{t[10].map((e,a)=>{n+=[t[0],t[1],t[2],t[3],t[6],t[7],t[8],t[9]].join(",")+","+e.join(",")+"\n"})}),n})(),p="smri-house-of-representatives-"+s+i+o+l+r+c+".csv",m=new Uint8Array([239,187,191]),u=new Blob([m,d],{type:"text/csv"});if(window.navigator.msSaveBlob)window.navigator.msSaveBlob(u,p);else{const t=(window.URL||window.webkitURL).createObjectURL(u),e=document.createElement("a");e.href=t,e.download=p,e.click(),(window.URL||window.webkitURL).revokeObjectURL(t)}}),$("#social-button-copy").on("click",function(t){t.preventDefault();let e=$("");e.text("国会議案データベース - スマートニュース メディア研究所\nhttps://smartnews-smri.github.io/house-of-representatives/"),$(this).append(e),e.select(),document.execCommand("copy"),e.remove();let a=$(this).next(".text-copy");a.addClass("copied"),setTimeout(function(){a.removeClass("copied")},3e3)})})()};$(function(){init()}); -------------------------------------------------------------------------------- /main.py: -------------------------------------------------------------------------------- 1 | # coding: utf-8 2 | 3 | from bs4 import BeautifulSoup 4 | import requests 5 | import csv 6 | import time 7 | import datetime 8 | import json 9 | import glob 10 | import os 11 | 12 | 13 | 14 | #------------------------------------------------------------- 15 | # Get constants 16 | #------------------------------------------------------------- 17 | 18 | def get_content_folder(): 19 | dir_data = "./data/" 20 | return dir_data 21 | 22 | 23 | def get_latest_kaiji(): 24 | r = requests.get(get_kaiji_url("")) 25 | html = BeautifulSoup(r.text, "html.parser") 26 | title = html.find("title").text # ex. "第208回国会 議案の一覧" 27 | 28 | title = title.replace("第", "") 29 | title = title.replace("回国会 議案の一覧", "") 30 | 31 | return title 32 | 33 | 34 | 35 | #------------------------------------------------------------- 36 | # Versatile functions 37 | #------------------------------------------------------------- 38 | 39 | # Get Kaiji URL 40 | def get_kaiji_url(kaiji): 41 | prefix = "https://www.shugiin.go.jp/internet/itdb_gian.nsf/html/gian/" 42 | if kaiji == "": 43 | return prefix + "menu.htm" 44 | else: 45 | return prefix + "kaiji" + kaiji + ".htm" 46 | 47 | 48 | 49 | # Get CSV file content as array 50 | # Return False if the file does NOT exist 51 | def get_csv(url): 52 | try: 53 | with open(url) as csvfile: 54 | read = csv.reader(csvfile, delimiter = ',') 55 | rows = list(read) 56 | return rows 57 | except FileNotFoundError: 58 | return False 59 | 60 | 61 | # Save CSV or JSON file 62 | def save_file(url, values): 63 | ext = url.split(".")[-1] 64 | 65 | if ext == "csv": 66 | with open(url, 'w', newline = '') as f: 67 | writer = csv.writer(f) 68 | writer.writerows(values) 69 | 70 | if ext == "json": 71 | with open(url, 'w') as f: 72 | json.dump(values, f, ensure_ascii = False) 73 | 74 | 75 | #------------------------------------------------------------- 76 | # Update data 77 | #------------------------------------------------------------- 78 | 79 | def parse_kaiji(kaiji): 80 | 81 | def parse_kaiji_main(kaiji): 82 | 83 | def get_td_value(tds, i, ttype): 84 | ret = "" 85 | 86 | if (len(tds) >= i + 1): 87 | if (ttype == "text"): 88 | ret = tds[i].text 89 | if (ttype == "href"): 90 | if (tds[i].find("a") != None): 91 | ret = tds[i].find("a")["href"] 92 | ret = ret.replace("./", "https://www.shugiin.go.jp/internet/itdb_gian.nsf/html/gian/") 93 | 94 | # Clean if the value consists of only spaces 95 | substitutions = ["  ", " "] 96 | for sub in substitutions: 97 | if ret == sub: 98 | ret = "" 99 | 100 | return ret 101 | 102 | 103 | result = [[ 104 | "掲載回次", 105 | "キャプション", 106 | "種類", 107 | "提出回次", 108 | "番号", 109 | "議案件名", 110 | "審議状況", 111 | "経過情報", 112 | "経過情報URL", 113 | "本文情報", 114 | "本文情報URL", 115 | "議案種類", 116 | "議案提出者", 117 | "議案提出会派", 118 | "衆議院予備審査議案受理年月日", 119 | "衆議院予備付託年月日/衆議院予備付託委員会", 120 | "衆議院議案受理年月日", 121 | "衆議院付託年月日/衆議院付託委員会", 122 | "衆議院審査終了年月日/衆議院審査結果", 123 | "衆議院審議終了年月日/衆議院審議結果", 124 | "衆議院審議時会派態度", 125 | "衆議院審議時賛成会派", 126 | "衆議院審議時反対会派", 127 | "参議院予備審査議案受理年月日", 128 | "参議院予備付託年月日/参議院予備付託委員会", 129 | "参議院議案受理年月日", 130 | "参議院付託年月日/参議院付託委員会", 131 | "参議院審査終了年月日/参議院審査結果", 132 | "参議院審議終了年月日/参議院審議結果", 133 | "公布年月日/法律番号", 134 | "議案提出者一覧", 135 | "議案提出の賛成者" 136 | ]] 137 | 138 | r = requests.get(get_kaiji_url(kaiji)) 139 | html = BeautifulSoup(r.text, "html.parser") 140 | tables = html.find_all('table') 141 | 142 | for table in tables: 143 | trs = table.find_all('tr') 144 | caption = table.find("caption").text 145 | 146 | for tr in trs: 147 | tds = tr.find_all('td') 148 | 149 | if len(tds) >= 1: 150 | row = [""] * len(result[0]) 151 | 152 | row[0] = kaiji 153 | row[1] = caption 154 | row[2] = "" 155 | row[3] = get_td_value(tds, 0, "text") 156 | row[4] = get_td_value(tds, 1, "text") 157 | row[5] = get_td_value(tds, 2, "text") 158 | row[6] = get_td_value(tds, 3, "text") 159 | row[7] = get_td_value(tds, 4, "text") 160 | row[8] = get_td_value(tds, 4, "href") 161 | row[9] = get_td_value(tds, 5, "text") 162 | row[10] = get_td_value(tds, 5, "href") 163 | 164 | if caption == "予算の一覧": 165 | row[9] = "" 166 | row[10] = "" 167 | 168 | if caption == "承諾の一覧": 169 | row[4] = "" 170 | row[5] = get_td_value(tds, 1, "text") 171 | row[6] = get_td_value(tds, 2, "text") 172 | row[7] = get_td_value(tds, 3, "text") 173 | row[8] = get_td_value(tds, 3, "href") 174 | row[9] = "" 175 | row[10] = "" 176 | 177 | if caption == "決算その他": 178 | row[2] = get_td_value(tds, 0, "text") 179 | row[3] = get_td_value(tds, 1, "text") 180 | row[4] = "" 181 | row[5] = get_td_value(tds, 2, "text") 182 | row[6] = get_td_value(tds, 3, "text") 183 | row[7] = get_td_value(tds, 4, "text") 184 | row[8] = get_td_value(tds, 4, "href") 185 | row[9] = "" 186 | row[10] = "" 187 | 188 | result.append(row) 189 | 190 | return result 191 | 192 | 193 | def parse_keika_all(kaiji, result): 194 | 195 | def parse_keika(row): 196 | time.sleep(1) 197 | url = row[8] 198 | r = requests.get(url) 199 | html = BeautifulSoup(r.text, "html.parser") 200 | 201 | tds = html.find_all("td") 202 | komokus = [] 203 | naiyos = [] 204 | skip_index = -1 205 | 206 | #print(url) 207 | 208 | for i, td in enumerate(tds): 209 | 210 | # If skip 211 | if i == skip_index: 212 | skip_index = -1 213 | continue 214 | 215 | if td.text == "議案提出者一覧" or td.text == "議案提出の賛成者": 216 | komokus.append(td.text) 217 | naiyos.append(tds[i + 1].text) 218 | skip_index = i + 1 # Append both Komoku and Naiyo, then skip the next 219 | else: 220 | if (td["headers"][0] == "KOMOKU"): 221 | komokus.append(td.text) 222 | if (td["headers"][0] == "NAIYO"): 223 | naiyos.append(td.text) 224 | 225 | #for i, komoku in enumerate(komokus): 226 | #print(komokus[i] + ": " + naiyos[i]) 227 | #print(komokus) 228 | #print(naiyos) 229 | 230 | for i, komoku in enumerate(komokus): 231 | 232 | if komoku == "議案提出回次" or komoku == "議案番号": 233 | continue 234 | 235 | naiyo = naiyos[i] 236 | naiyo = naiyo.replace("\r", ""); 237 | naiyo = naiyo.replace("\n", ""); 238 | 239 | header_index = result[0].index(komoku) 240 | row[header_index] = naiyo 241 | 242 | for row in result: 243 | if (row[8][0:8] == "https://"): 244 | parse_keika(row) 245 | 246 | return result 247 | 248 | 249 | def update_gian_file(kaiji, result): 250 | # Get existing kaiji CSV 251 | gian_all_raw = get_csv(DIR_DATA + "gian.csv") 252 | 253 | # Delete existing kaiji row 254 | gian_all = [] 255 | for kaiji_row in gian_all_raw: 256 | if kaiji_row[0] != kaiji: 257 | gian_all.append(kaiji_row) 258 | 259 | # Get index of kaiji 260 | index = len(gian_all) 261 | for i, kaiji_row in enumerate(gian_all): 262 | if i == 0: 263 | continue 264 | if int(kaiji_row[0]) > int(kaiji): 265 | index = i 266 | break 267 | 268 | # Insert into gian_all 269 | for row in result[1:]: 270 | gian_all.insert(index, row) 271 | index += 1 272 | 273 | save_file(DIR_DATA + "gian.csv", gian_all) 274 | save_file(DIR_DATA + "gian.json", gian_all) 275 | 276 | 277 | 278 | result = parse_kaiji_main(kaiji) 279 | result = parse_keika_all(kaiji, result) 280 | 281 | #for r in result: 282 | #print(r) 283 | 284 | update_gian_file(kaiji, result) 285 | 286 | 287 | 288 | def update_gian_summary(): 289 | gian_all = get_csv(DIR_DATA + "gian.csv") 290 | gian_sum = [] 291 | 292 | for a_row in gian_all[1:]: 293 | appendrow = [ 294 | a_row[0], 295 | a_row[6], 296 | a_row[7], 297 | a_row[8], 298 | a_row[9], 299 | a_row[10], 300 | a_row[11], 301 | a_row[14], 302 | a_row[15], 303 | a_row[16], 304 | a_row[17], 305 | a_row[18], 306 | a_row[19], 307 | a_row[20], 308 | a_row[21], 309 | a_row[22], 310 | a_row[23], 311 | a_row[24], 312 | a_row[25], 313 | a_row[26], 314 | a_row[27], 315 | a_row[28], 316 | a_row[29] 317 | ] 318 | 319 | s_index = -1 320 | for i, s_row in enumerate(gian_sum): 321 | if s_row[0] == a_row[11] and s_row[1] == a_row[3] and s_row[2] == a_row[4] and s_row[3] == a_row[5]: 322 | s_index = i 323 | 324 | if s_index >= 0: 325 | gian_sum[s_index][4] = a_row[0] # 掲載回次 326 | gian_sum[s_index][5] = a_row[6] # 審議状況 327 | gian_sum[s_index][6] = a_row[12] # 議案提出者 328 | gian_sum[s_index][7] = a_row[13] # 議案提出会派 329 | gian_sum[s_index][8] = a_row[-2] # 議案提出者一覧 330 | gian_sum[s_index][9] = a_row[-1] # 議案提出の賛成者 331 | gian_sum[s_index][10].append(appendrow) 332 | else: 333 | newrow = [ 334 | a_row[11], # 議案種類 335 | a_row[3], # 提出回次 336 | a_row[4], # 番号 337 | a_row[5], # 議案件名 338 | a_row[0], # 掲載回次 339 | a_row[6], # 審議状況 340 | a_row[12], # 議案提出者 341 | a_row[13], # 議案提出会派 342 | a_row[-2], # 議案提出者一覧 343 | a_row[-1], # 議案提出の賛成者 344 | [appendrow] 345 | ] 346 | 347 | gian_sum.append(newrow) 348 | 349 | save_file(DIR_DATA + "gian_summary.json", gian_sum) 350 | 351 | 352 | 353 | def update_time(): 354 | dt_now = datetime.datetime.now() 355 | dt_str = dt_now.strftime('%Y-%m-%d %H:%M:%S') 356 | 357 | latest = { 358 | 'file_update': dt_str 359 | } 360 | 361 | save_file(DIR_DATA + "updatetime.json", latest) 362 | 363 | 364 | 365 | #------------------------------------------------------------- 366 | # Main 367 | #------------------------------------------------------------- 368 | 369 | DIR_DATA = get_content_folder() 370 | parse_kaiji(get_latest_kaiji()) 371 | update_gian_summary() 372 | update_time() 373 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | beautifulsoup4 2 | requests --------------------------------------------------------------------------------