OpenDataPortaal / src / readme.md
Code · 95 lines · 2411 bytes
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95# OpenKamer

Dit publieke .NET Core 7 project gebruikt het datamodel zoals te vinden is onder https://opendata.tweedekamer.nl/documentatie/

De XSD beschrijving is omgezet in C# classes, deze zijn te vinden onder OpenKamer.DataModel tkData-v1-0.cs

Een FeedController zorgt voor het overhalen van de data files volgens https://gegevensmagazijn.tweedekamer.nl/SyncFeed/2.0/ om deze vervolgens lokaal op te slaan (cache) op een filesysteem.
                        
![FeedController](https://raw.githubusercontent.com/alphons/OpenDataPortaal/master/blob/OpenKamer1.png)

Een EntityController leest de datafiles en slaat de Entiteiten op in een mongodb server.

![EntityController](https://raw.githubusercontent.com/alphons/OpenDataPortaal/master/blob/OpenKamer2.png)

Na het importeren zijn dit de collecties binnen MongoDB

![MongDB Collections](https://raw.githubusercontent.com/alphons/OpenDataPortaal/master/blob/OpenKamer3.png)

Voorbeeld (C#) van een mongodb query in een api method:

```c#
[HttpPost]
[Route("~/api/Fracties")]
public async Task<IActionResult> Fracties()
{
  var query = @"
  [
    { $match: { verwijderd: false, aantalZetels : { $gt : 0 } } },
    { 
      $project:
      {
        _id: 0,
        afkorting : 1,
        naam: '$naamNl',
        zetels: '$aantalZetels',
        stemmen: '$aantalStemmen',
      }
    },
    {
      $sort: { aantalZetels : -1, aantalStemmen:-1  }
    },
    { $skip: 0 },
    { $limit: 25 }
  ]";

  var List = await db.GetCollection("fractieType").Aggregate(query).ToListAsync();
  return Ok(new
  {
    List
  });
}
```
Output (eerste 5):

```json
[
  {
    "afkorting": "VVD",
    "naam": "Volkspartij voor Vrijheid en Democratie",
    "zetels": 34,
    "stemmen": 2279130
  },
  {
    "afkorting": "D66",
    "naam": "Democraten 66",
    "zetels": 24,
    "stemmen": 1565861
  },
  {
    "afkorting": "PVV",
    "naam": "Partij voor de Vrijheid",
    "zetels": 17,
    "stemmen": 1124482
  },
  {
    "afkorting": "CDA",
    "naam": "Christen-Democratisch App�l",
    "zetels": 14,
    "stemmen": 990601
  },
  {
    "afkorting": "SP",
    "naam": "Socialistische Partij",
    "zetels": 9,
    "stemmen": 623371
  }
]

```

Als proof-of-concept is een webinterface beschikbaar waarbij beschikbare data kan worden opgevraagd.

Voorbeeld fractieType:

![Fracties](https://raw.githubusercontent.com/alphons/OpenDataPortaal/master/blob/OpenKamer4.png)