index.php (33206B)
1 <?php
2
3 /* SPDX-License-Identifier: AGPL-3.0-or-later
4 * SPDX-FileCopyrightText: 2025 JayVii <jayvii+kontra[AT]posteo[DOT]de>
5 */
6
7 /* Loading configuration */
8 $config = json_decode(
9 file_get_contents("./news-sources.json"),
10 true
11 );
12
13 /* OPML Generator */
14
15 /* Check for user input */
16 if (!is_null($_POST["action"])) {
17
18 /* Generate OPML */
19 if ($_POST["action"] === "gen_opml") {
20
21 /* Gather news sources from selection */
22 $input_keys = preg_grep(
23 "/^source-[0-9]+$/",
24 array_keys($_POST)
25 );
26 $sources = array();
27 foreach ($input_keys as $key) {
28 array_push(
29 $sources,
30 $config["sources"][$_POST[$key]]
31 );
32 }
33
34 $exp_hash = md5(serialize($sources));
35 $file_name = "kontra_" . date("Y-m-d") . "_" . $exp_hash . ".opml";
36
37 /* Set Download and content type headers */
38 header('Content-Type: application/xml; charset=UTF-8');
39 header(
40 'Content-Disposition: Attachment;filename="' . $file_name . '"'
41 );
42
43 /* Build OPML file */
44 ?>
45
46 <opml version="2.0">
47 <head>
48 <title>
49 Nachrichten-Export von Kontra -
50 <?php echo "https://" . $_SERVER["SERVER_NAME"] . PHP_EOL; ?>
51 </title>
52 </head>
53 <body>
54
55 <?php
56
57 /* Cycle through each source and write source entry */
58 $indexes = array(
59 "regions", "languages", "access", "medium", "topics"
60 );
61 foreach ($sources as $source) {
62
63 /* Construct title */
64 $title = $config["publisher"][$source["publisher"][0]]["name"] .
65 ": " . $source["title"];
66
67 /* Create category list */
68 $categories = array();
69 foreach ($indexes as $index) {
70 foreach ($source[$index] as $category) {
71 array_push(
72 $categories,
73 $config[$index][$category]["name"]
74 );
75 }
76 }
77
78 ?>
79
80 <outline
81 title="<?php echo $title; ?>"
82 text="<?php echo $title; ?>"
83 category="<?php echo implode(",", $categories); ?>"
84 xmlUrl="<?php echo $source["rss"]; ?>"
85 htmlUrl="<?php echo $source["web"]; ?>"
86 />
87
88 <?php
89
90 } // foreach-source
91
92 ?>
93
94 </body>
95 </opml>
96
97 <?php
98
99 die();
100 } // if-action
101 } // if-input
102
103 ?>
104
105 <!doctype html>
106 <html>
107
108 <!-- Head -->
109 <head>
110 <meta charset=utf-8>
111 <meta name=viewport content="width=device-width,initial-scale=1">
112 <link rel=icon href=assets/img/favicon.png type=image/png>
113 <link rel=icon href=assets/img/favicon.ico type=x-image/ico>
114 <link rel=stylesheet href=assets/css/simple.min.css media=all>
115 <link rel=stylesheet href=assets/css/custom.css>
116 <script async src=assets/js/filter_engines.js></script>
117 <title>Kontra - Das progressive Nachrichtenarchiv</title>
118 </head>
119
120 <!-- Body -->
121 <body>
122
123 <!-- Header -->
124 <header>
125 <nav>
126 <a href="#sources">
127 Nachrichten
128 </a>
129 <a href="#faqs">
130 Was ist das?
131 </a>
132 <a href="https://src.jayvii.de/pub/kontra/" target="_blank">
133 Hilf mit!
134 </a>
135 </nav>
136 <h1>Kontra</h1>
137 <p>Das progressive Nachrichtenarchiv</p>
138 </header>
139
140 <!-- Description -->
141 <div class="fullheight">
142 <div class="description">
143 <strong style="font-size: 133%;">
144 Nachrichten von Links! Ohne Tracking, ohne Tech-Konzerne und
145 ohne algorithmisches Framing.
146 </strong>
147 <p>
148 Auf dieser Seite befinden sich viele seriöse Medienquellen
149 aus dem <em>progressiven</em> Spektrum von Zeitungen,
150 Magazinen und sonstigen journalistischen Veröffentlichungen,
151 aus denen sich persönliche Nachrichten-Feeds erstellen
152 lassen.
153 </p>
154 </div>
155 <div class="buttonrow">
156 <a href="#usage" class="button c2">
157 Wie funktioniert das?
158 </a>
159 <a href="#sources" class="button c2">
160 Zu den Nachrichten!
161 </a>
162 </div>
163 </div>
164
165 <div class="fullheight screenshots" id="usage">
166 <h3>Was ist Kontra?</h3>
167 <figure class="buttonrow">
168 <img style="flex:26%;min-width:91px;margin:2.5px;" src="assets/img/applications/gfeeds_mobile.jpg">
169 <img style="flex:72%;min-width:252px;margin:2.5px;" src="assets/img/applications/gfeeds_desktop.jpg">
170 <figcaption style="width:100%;">
171 Nachrichten Feeds aus Kontra in <a href="https://gfeeds.gabmus.org/" target="_blank">Gnome Feeds</a>
172 </figcaption>
173 </figure>
174 <p>
175 Kontra versetzt Nutzer:innen in die Lage, selbstbestimmt
176 personalisierte Nachrichten-Feeds von seriösen <em>progressiven</em>
177 Quellen zu erstellen, um immer auf dem Laufenden zu bleiben.
178 Und das selbstverständlich
179 <strong>ohne <a href="https://de.wikipedia.org/wiki/Web_Analytics" target="_blank">Tracking</a></strong>,
180 <strong>ohne Datensammelwut</strong>,
181 <strong>ohne Konto-Zwang</strong>
182 <strong>ohne <a href="https://de.wikipedia.org/wiki/Soziales_Netzwerk_(Internet)#Kritik" target="_blank">Algorithmen</a></strong> und
183 <strong>ohne <a href="https://de.wikipedia.org/wiki/Lock-in-Effekt" target="_blank">Lock-In Effekte</a></strong>.
184 Wie das funktioniert, erfährst du <a href="#faqs">hier</a>!
185 </p>
186 <p>
187 Die in Kontra hinterlegten Medien behandeln ein breites Spektrum
188 an Themen und mit unterschiedlichen Fokuspunkten. Sie vereint
189 eine <em>progressive</em> und politisch <em>linke</em>
190 Sichtweise. Die Idee hinter Kontra ist, die Nutzung von Medien
191 zu vereinfachen und Menschen in die Lage zu versetzen, selbst
192 kuratierte Nachrichtenquellen und Themenbereiche zu verfolgen.
193 </p>
194 <p>
195 Kontra ist ein Archiv mit aktuell
196 <strong><?php echo count($config["sources"]); ?></strong>
197 Nachrichten-Feeds aus
198 <strong><?php echo count($config["publisher"]); ?></strong>
199 unterschiedlichen Quellen, zu
200 <strong><?php echo count($config["topics"]); ?></strong>
201 Themenbereichen, innerhalb von
202 <strong><?php echo count($config["regions"]); ?></strong>
203 Regionen, in
204 <strong><?php echo count($config["languages"]); ?></strong>
205 verschiedenen Sprachen. Nutzer:innen können sich aus diesem
206 Katalog eigene Nachrichten-Feeds gänzlich nach ihren Interessen
207 zusammenstellen. Die hier herunterladbaren
208 <a href="https://de.wikipedia.org/wiki/Outline_Processor_Markup_Language" target="_blank">
209 Nachrichten-Feed Dateien</a>
210 können in beliebigen
211 <a href="https://de.wikipedia.org/wiki/Feedreader" target="_blank">
212 Feed-Readern</a>
213 eingeladen und sofort genutzt werden!
214 Zum Beispiel in diesen
215 <a href="https://fsfe.org/freesoftware/freesoftware.de.html" target="_blank">
216 Freien</a>
217 und kostenlosen Apps für Android und iOS:
218 <ul>
219 <li><a href="https://apps.apple.com/us/app/netnewswire-rss-reader/id1480640210" target="_blank">NetNewsWire (iOS)</a></li>
220 <li><a href="https://apps.apple.com/us/app/twine-rss-reader/id6465694958" target="_blank">Twine (iOS)</a></li>
221 <li><a href="https://play.google.com/store/apps/details?id=com.nononsenseapps.feeder.play" target="_blank">Feeder (Android)</a></li>
222 <li><a href="https://play.google.com/store/apps/details?id=dev.sasikanth.rss.reader" target="_blank">Twine (Android)</a></li>
223 <li><a href="https://freshrss.org/" target="_blank">FreshRSS (Web)</a></li>
224 <li><a href="https://www.thunderbird.net/de/" target="_blank">Thunderbird (Windows, MacOS, Linux)</a></li>
225 <li><a href="https://gfeeds.gabmus.org/" target="_blank">Feeds (Linux)</a></li>
226 <li><a href="https://apps.gnome.org/de/NewsFlash/" target="_blank">NewsFlash (Linux)</a></li>
227 <li><a href="https://apps.kde.org/de/alligator/" target="_blank">Alligator (Linux)</a></li>
228 <li><a href="https://alternativeto.net/browse/search/?q=rss%20reader" target="_blank">und viele weitere</a>...</li>
229 </ul>
230 </p>
231 <p>
232 Ganz einfach in nur <strong>zwei Minuten</strong> loslegen!
233 Nachrichtenquellen aussuchen, Feed-Datei herunterladen, in
234 den Reader importieren und sofort informiert werden.
235 </p>
236
237 <div class="buttonrow">
238 <a href="#faqs" class="button c2">
239 Mehr erfahren
240 </a>
241 <a href="#sources" class="button c2">
242 Zu den Nachrichten!
243 </a>
244 </div>
245 </div>
246
247 <!-- Search Engine Lists -->
248 <h3 id="sources" style="margin-top:5em;">
249 Eigenen Nachrichten-Feed generieren
250 </h3>
251 <p>
252 Wähle beliebig viele Nachrichtenquellen aus der unteren Liste aus
253 und klicke auf den <strong>Nachrichten-Feed erzeugen</strong> Knopf.
254 Speichere die darauf angebotene OPML-Datei ab und importiere sie in
255 deinen RSS-Reader.
256 </p>
257 <p>
258 Kontra bietet zur Zeit Zugriff auf
259 <strong><?php echo count($config["sources"]); ?></strong>
260 Nachrichten-Feeds aus
261 <strong><?php echo count($config["publisher"]); ?></strong>
262 unterschiedlichen Quellen, zu
263 <strong><?php echo count($config["topics"]); ?></strong>
264 Themenbereichen, innerhalb von
265 <strong><?php echo count($config["regions"]); ?></strong>
266 Regionen, in
267 <strong><?php echo count($config["languages"]); ?></strong>
268 verschiedenen Sprachen. Nutze die Suchfunktion und die
269 Kategorienliste, um die Auswahl zu erleichtern.
270 </p>
271 <!-- Filterbar -->
272 <input
273 id="sources_filterbar"
274 name="sources"
275 type="text"
276 placeholder="Suche nach Nachrichtenquellen oder Kategorien..."
277 oninput="filter_sources('sources_filterbar');"
278 >
279 <noscript>
280 <div class="notice">
281 <p>
282 Achtung: Die Nutzung der Suchfunktion benötigt aktiviertes
283 JavaScript. Entweder unterstützt dein Browser diese
284 Funktion nicht, oder du hast sie auf dieser Seite blockiert.
285 <strong>
286 Du kannst dennoch einen Nachrichten-Feed erzeugen, jedoch
287 ohne die Suchfunktion oben dafür nutzen zu können.
288 </strong>
289 </p>
290 </div>
291 </noscript>
292
293 <!-- Category Buttons -->
294 <details id="categories">
295 <summary>Kategorien</summary>
296
297 <h4>Themen</h4>
298 <div class="row">
299
300 <!-- List all configured regions -->
301 <?php
302 foreach ($config["topics"] as $topic) {
303 ?>
304 <button
305 onclick="filter_category('<?php echo $topic["name"]; ?>');"
306 title="<?php echo $topic["description"]; ?>"
307 >
308 <?php echo "#" . $topic["name"]; ?>
309 </button>
310 <?php
311 }
312 ?>
313
314 </div>
315
316 <h4>Regionen</h4>
317 <div class="row">
318
319 <!-- List all configured regions -->
320 <?php
321 foreach ($config["regions"] as $region) {
322 ?>
323 <button
324 onclick="filter_category('<?php echo $region["name"]; ?>');"
325 title="<?php echo $region["description"]; ?>"
326 >
327 <?php echo "#" . $region["name"]; ?>
328 </button>
329 <?php
330 }
331 ?>
332
333 </div>
334
335 <h4>Sprachen</h4>
336 <div class="row">
337
338 <!-- List all configured languages -->
339 <?php
340 foreach ($config["languages"] as $language) {
341 ?>
342 <button
343 onclick="filter_category('<?php echo $language["name"]; ?>');"
344 title="<?php echo $language["description"]; ?>"
345 >
346 <?php echo "#" . $language["name"]; ?>
347 </button>
348 <?php
349 }
350 ?>
351
352 </div>
353
354 <h4>Zugriff</h4>
355 <div class="row">
356
357 <!-- List all configured access types -->
358 <?php
359 foreach ($config["access"] as $access) {
360 ?>
361 <button
362 onclick="filter_category('<?php echo $access["name"]; ?>');"
363 title="<?php echo $access["description"]; ?>"
364 >
365 <?php echo "#" . $access["name"]; ?>
366 </button>
367 <?php
368 }
369 ?>
370
371 </div>
372
373 <h4>Medium</h4>
374 <div class="row">
375
376 <!-- List all configured media -->
377 <?php
378 foreach ($config["medium"] as $medium) {
379 ?>
380 <button
381 onclick="filter_category('<?php echo $medium["name"]; ?>');"
382 title="<?php echo $medium["description"]; ?>"
383 >
384 <?php echo "#" . $medium["name"]; ?>
385 </button>
386 <?php
387 }
388 ?>
389
390 </div>
391
392 <h4>Quellen</h4>
393 <div class="row">
394
395 <!-- List all configured sources -->
396 <?php
397 foreach ($config["publisher"] as $publisher) {
398 ?>
399 <button
400 onclick="filter_category('<?php echo $publisher["button"]; ?>');"
401 title="<?php echo $publisher["description"]; ?>"
402 >
403 <?php echo "#" . $publisher["button"]; ?>
404 </button>
405 <?php
406 }
407 ?>
408
409 </div>
410
411 </details>
412
413 <!-- Sources List -->
414 <form id="sources-selection" method="post">
415
416 <!-- Submit button -->
417 <div class="submit-container">
418 <input type="submit" value="Nachrichten-Feed erzeugen!">
419 <a href="#sources" class="button" title="Nach oben">
420 👆 <stretch class="nomobile">Nach oben</stretch>
421 </a>
422 <a href="#faqs" class="button" title="Nach unten">
423 👇 <stretch class="nomobile">Nach unten</stretch>
424 </a>
425 </div>
426 <input type="hidden" name="action" value="gen_opml">
427 <?php
428 $cnt = 0;
429 foreach ($config["sources"] as $id => $source) {
430 $cnt++; // increase counter for POST field ID
431
432 /* Gather publishing medium info */
433 $publisher = $config["publisher"][
434 array_pop($source["publisher"])
435 ];
436 ?>
437 <article>
438 <!-- Entry-Head -->
439 <h3>
440 <a href="<?php echo $source["web"]; ?>" target="_blank">
441 <?php
442 echo $publisher["name"] . ": " . $source["title"];
443 ?>
444 </a>
445 </h3>
446
447 <!-- Description -->
448 <p>
449 <?php
450 echo $publisher["desc"] . " " . $source["desc"];
451 ?>
452 </p>
453
454 <!-- Choose this Button -->
455 <input
456 type="checkbox"
457 name="<?php echo "source-" . $cnt; ?>"
458 value="<?php echo $id; ?>"
459 >
460 <label for="<?php echo $id; ?>">
461 Diese Nachrichtenquelle auswählen
462 </label>
463
464 <!-- Entry-Categories -->
465 <table style="width:100%;">
466
467 <tr>
468 <th>Quelle:</th>
469 <td>
470 <mark title="<?php echo $publisher["desc"];?>">
471 <?php echo "#" . $publisher["button"]; ?>
472 </mark>
473 </td>
474 </tr>
475
476 <tr>
477 <th>Region:</th>
478 <td>
479 <?php
480 foreach ($source["regions"] as $region) {
481 $catentry = $config["regions"][$region]
482 ?>
483 <mark title="<?php echo $catentry["description"];?>">
484 <?php echo "#" . $catentry["name"]; ?>
485 </mark>
486 <?php
487 }
488 ?>
489 </td>
490 </tr>
491
492 <tr>
493 <th>Sprachen:</th>
494 <td>
495 <?php
496 foreach ($source["languages"] as $language) {
497 $catentry = $config["languages"][$language]
498 ?>
499 <mark title="<?php echo $catentry["description"];?>">
500 <?php echo "#" . $catentry["name"]; ?>
501 </mark>
502 <?php
503 }
504 ?>
505 </td>
506 </tr>
507
508 <tr>
509 <th>Zugang:</th>
510 <td>
511 <?php
512 foreach ($source["access"] as $access) {
513 $catentry = $config["access"][$access]
514 ?>
515 <mark title="<?php echo $catentry["description"];?>">
516 <?php echo "#" . $catentry["name"]; ?>
517 </mark>
518 <?php
519 }
520 ?>
521 </td>
522 </tr>
523
524 <tr>
525 <th>Medium:</th>
526 <td>
527 <?php
528 foreach ($source["medium"] as $medium) {
529 $catentry = $config["medium"][$medium]
530 ?>
531 <mark title="<?php echo $catentry["description"];?>">
532 <?php echo "#" . $catentry["name"]; ?>
533 </mark>
534 <?php
535 }
536 ?>
537 </td>
538 </tr>
539
540 <tr>
541 <th>Themen:</th>
542 <td>
543 <?php
544 foreach ($source["topics"] as $topic) {
545 $catentry = $config["topics"][$topic]
546 ?>
547 <mark title="<?php echo $catentry["description"];?>">
548 <?php echo "#" . $catentry["name"]; ?>
549 </mark>
550 <?php
551 }
552 ?>
553 </td>
554 <tr>
555 </table>
556
557 </article>
558 <?php
559 }
560 ?>
561 </form>
562
563 <!-- FAQs / About-Section -->
564 <section id="faqs">
565
566 <h3>Was ist <em>Kontra</em>?</h3>
567
568 <details>
569 <summary>Was sind Feed-Reader / RSS-Reader?</summary>
570 <p>
571 Feed- oder RSS-Reader erlauben es, so genannte RSS-Feeds zu
572 <em>abonnieren</em>, um regelmäßig Nachrichten von diesen zu
573 erhalten. Das Konzept ist vergleichbar mit einem E-Mail
574 Newsletter.
575 </p>
576 <p>
577 Der Unterschied besteht darin, dass man, um einen Newsletter
578 erhalten zu können, den Versender:innen eine E-Mail Adresse
579 hinterlegen muss. Newsletter werden dann aktiv von den
580 Versender:innen an bekannte Empfänger:innen verschickt.
581 </p>
582 <p>
583 Bei RSS-Feeds ist es umgekehrt. Empfänger:innen (bzw. von
584 ihnen genutzt Feed-Reader) ziehen sich die Nachrichten von
585 den Nachrichten-Seiten oder Blogs selbst. Letztere wissen
586 dabei gar nicht, wer die Empfänger:innen sind oder wie viele
587 es letztendlich sind.
588 </p>
589 <p>
590 Der RSS-Reader ist lediglich die Software, welche die
591 Nachrichten empfängt und diese oft in einem Listen-Format
592 zum Lesen anzeigt. Es gibt eine Vielzahl wirklich guter
593 und zeitgemäßer RSS-Reader für alle möglichen Endgeräte,
594 ganz egal ob am PC, Smartphone, Tablet, E-Book-Reader oder
595 per Webbrowser.
596 </p>
597 <p>
598 Folgende RSS-Reader sind kostenlos und darüber hinaus noch
599 <a href="https://fsfe.org/freesoftware/freesoftware.de.html" target="_blank">
600 Freie, Open Source Software
601 </a>:
602 <ul>
603 <li><a href="https://apps.apple.com/us/app/netnewswire-rss-reader/id1480640210" target="_blank">NetNewsWire (iOS)</a></li>
604 <li><a href="https://apps.apple.com/us/app/twine-rss-reader/id6465694958" target="_blank">Twine (iOS)</a></li>
605 <li><a href="https://play.google.com/store/apps/details?id=com.nononsenseapps.feeder.play" target="_blank">Feeder (Android)</a></li>
606 <li><a href="https://play.google.com/store/apps/details?id=dev.sasikanth.rss.reader" target="_blank">Twine (Android)</a></li>
607 <li><a href="https://freshrss.org/" target="_blank">FreshRSS (Web)</a></li>
608 <li><a href="https://www.thunderbird.net/de/" target="_blank">Thunderbird (Windows, MacOS, Linux)</a></li>
609 <li><a href="https://gfeeds.gabmus.org/" target="_blank">Feeds (Linux)</a></li>
610 <li><a href="https://apps.kde.org/de/alligator/" target="_blank">Alligator (Linux)</a></li>
611 <li><a href="https://alternativeto.net/browse/search/?q=rss%20reader" target="_blank">und viele weitere</a>...</li>
612 </ul>
613 </p>
614 </details>
615
616 <details>
617 <summary>Kann ich weitere Nachrichten-Feeds abonnieren?</summary>
618 <p>
619 Ja! Gibt es Nachrichtenquellen, die nicht in Kontra
620 enthalten sind, kann man diese auch einzeln im eigenen
621 Feed-Reader abonnieren. Auch das ist sehr einfach und dauert
622 in der Regel nur wenige Sekunden.
623 </p>
624 <p>
625 Fast alle Online-Medien haben eine Unterseite, auf der sie
626 ihre RSS-Feeds auflisten. Folgende Medien sind
627 beispielsweise wegen des Fokus auf dediziert progressive Medien
628 nicht in Kontra enthalten, lassen sich aber sehr einfach
629 über einen RSS-Reader abonnieren:
630 <ul>
631 <li><a href="https://www.tagesschau.de/infoservices/rssfeeds" target="_blank">Tagesschau (ÖRR)</a></li>
632 <li><a href="https://www.deutschlandfunk.de/rss-angebot-102.html" target="_blank">Deutschlandfunk (ÖRR)</a></li>
633 <li><a href="https://www.sueddeutsche.de/service/updates-mit-rss-uebersicht-aller-rss-feeds-fuer-sz-de-sz-magazin-und-jetzt-de-1.393950" target="_blank">Süddeutsche Zeitung</a></li>
634 </ul>
635 </p>
636 </details>
637
638 <details>
639 <summary>Ist Kontra kostenlos?</summary>
640 <p>
641 Ja! Kontra ist und bleibt kostenlos. Es ist lediglich ein
642 kleines privates Software-Projekt einer Einzelperson.
643 </p>
644 <p>
645 Zudem wird Kontra als
646 <a href="https://fsfe.org/freesoftware/freesoftware.de.html" target="_blank">
647 Freie, Open Source Software
648 </a>
649 entwickelt. Der Programm-Code kann also von allen jederzeit
650 eingesehen werden. Verbesserungsvorschläge oder eigene
651 Code-Beiträge sind stets willkommen. Es ist auch erlaubt,
652 eigene Projekte auf Kontra aufzubauen. Diese müssen jedoch
653 ebenfalls unter einer Freien Software-Lizenz stehen.
654 </p>
655 <p>
656 Du möchtest helfen?
657 <a href="https://src.jayvii.de/pub/kontra/" target="_blank">
658 Hier
659 </a> findest du mehr Informationen dazu.
660 </p>
661 </details>
662
663 <details>
664 <summary>Ist das <em>Abonnieren</em> eines RSS-Feed kostenlos?</summary>
665 <p>
666 Ja! Allerdings kann es sein, dass einige der in den
667 Nachrichten-Feeds angebotenen Artikel hinter einer
668 Bezahlschranke liegen, also oft nicht in voller Länge
669 gelesen werden können, ohne ein Abonnement bei der
670 jeweiligen Online-Publikation, bzw. ein Zeitungsabonnement
671 abzuschließen.
672 </p>
673 <p>
674 Kontra kennzeichnet Nachrichtenquellen, bei denen einige
675 Artikel hinter einer Bezahlschranke liegen können.
676 Nachrichtenquellen, die niemals eine Bezahlschranke nutzen
677 sind ebenfalls in einer eigenen Kategorie.
678 </p>
679 </details>
680
681 <details>
682 <summary>Sammelt Kontra meine Daten?</summary>
683 <p>
684 Nein! Kontra sammelt keinerlei Datein über Personen und
685 Geräte, die diese Seite besuchen und Kontra nutzen.
686 Technisch bedingt, wird bei jedem Aufruf <em>jeder</em>
687 Webseite im Internet mindestens die eigene IP-Adresse und
688 oft noch weitere Informationen über das Betriebssystem, den
689 Webbrowser, bzw. das verwendete Gerät übermittelt. Kontra
690 speichert <strong>keine</strong> dieser Informationen.
691 </p>
692 <p>
693 Zudem stellt Kontra lediglich das Archiv von RSS-Feeds zur
694 Verfügung. Kontra speichert außerdem keine Informationen
695 darüber, welche Nachrichtenquellen von Nutzer:innen
696 ausgewählt werden.
697 </p>
698 <p>
699 Mit dem Herunterladen der Feed-Datei endet der
700 Datenaustausch zwischen den Nutzer:innen und Kontra. Kontra
701 hat technisch bedingt keinen Einblick darin, ob und welche
702 Nachrichten Nutzende in einen Feedreader einlesen oder
703 welche Nachrichten tatsächlich von Nutzer:innen gelesen
704 werden. Das liegt daran, dass die Nachrichten
705 <strong>direkt</strong> und ohne Umwege von den jeweiligen
706 Nachrichtenseiten kommen und zu keinem Zeitpunkt über Kontra
707 laufen.
708 </p>
709 </details>
710
711 <details>
712 <summary>Welche Technik nutzt Kontra?</summary>
713 <p>
714 Millionen Webseiten und Online-Zeitungen weltweit bieten die
715 offene Schnittstelle
716 <a href="https://de.wikipedia.org/wiki/RSS_(Web-Feed)" target="_blank">
717 RSS
718 </a> (zu deutsch: <em>sehr einfache Verbreitung</em>) an.
719 Nahezu jeder Blog, jede Nachrichtenseite und
720 Online-Veröffentlichungen nutzen einen <em>RSS</em> Feed.
721 Das ist eine maschinenlesbare Datei, welche alle dort
722 veröffentlichte Nachrichten und einige Zusatzinformationen
723 (Veröffentlichungszeitpunkt, Autor:in, Kurzzusammenfassung,
724 usw.) enthält. RSS kann als <em>schwarzes Brett</em>
725 digitaler Medien verstanden werden.
726 </p>
727 <p>
728 Kontra stellt eben diese RSS-Feeds für alle von Nutzer:innen
729 ausgewählte Medien in einer herunterladbaren Datei zusammen,
730 die in üblichen Feedreadern (siehe:
731 <em><strong>Was sind Feedreader?</strong></em>) importiert
732 werden kann. Diese Datei basiert auf dem offenen
733 <a href="https://de.wikipedia.org/wiki/Outline_Processor_Markup_Language", target="_blank">
734 OPML
735 </a> Format und wird von nahezu allen RSS/Feed-Readern
736 verstanden. Damit gewährleistet Kontra, dass es keinen
737 sogenannten <em>Lock-In</em> Effekt gibt, der Nutzer:innen
738 an eine einzige App binden und der Wechsel zu Alternativen
739 erschwert.
740 </p>
741 <p>
742 Die angesprochenen OPML-Dateien enthalten nicht nur die
743 RSS-Feeds selbst, sondern auch alle Kategorien, die man
744 ihnen innerhalb des eigenen Feed-Readers zugewiesen hat. Die
745 OPML-Dateien aus Kontra enthalten alle Kategorie-Label, die
746 auch in der Liste sichtbar sind.
747 </p>
748 <p>
749 <strong>Kurzum:</strong> RSS und OPML sind die grundlegende
750 Technik, auf die <em>Kontra</em> setzt. Nachrichten können
751 darüber direkt von Blogs und Zeitungen bezogen werden, ohne
752 dass Dritte Einsicht darin haben. Feeds können in nahezu
753 allen Feedreadern importiert und exportiert werden. Ein
754 Wechsel von einer App zu einer anderen ist also innerhalb
755 von Sekunden möglich.
756 </p>
757 </details>
758
759 </section>
760
761 <footer>
762 <h4>Disclaimer</h4>
763 <p>
764 Die Schlagzeilen, Inhalte oder Einstellungen der Redakteur:innen
765 und Autor:innen der hier aufgeführten Nachrichtenagenturen,
766 Blogs und Zeitungen spiegeln nicht unbedingt die Meinungen und
767 Einstellungen der Entwickler:innen und Betreiber:innen von
768 <em>Kontra</em> wider. <em>Kontra</em> ist ein Quellenarchiv für
769 Nachrichtenaggregatoren, der Inhalte aus vielen verschiedenen
770 Quellen zusammenführt werden. <em>Kontra</em> hat
771 selbstverständlich keinen direkten Einfluss auf den
772 redaktionellen Inhalt.
773 </p>
774 <em>Version:</em> <code><?php echo $config["version"]; ?></code>
775 </footer>
776
777 </body>
778
779 </html>