├── .github
└── workflows
│ └── generate_and_deploy_opml.yml
├── README.md
└── transform_to_opml.py
/.github/workflows/generate_and_deploy_opml.yml:
--------------------------------------------------------------------------------
1 | name: Generate and Deploy OPML Files
2 |
3 | on:
4 | push:
5 | branches:
6 | - main
7 | pull_request:
8 | branches:
9 | - main
10 | workflow_dispatch:
11 |
12 | jobs:
13 | build:
14 | runs-on: ubuntu-latest
15 |
16 | steps:
17 | - name: Checkout repository
18 | uses: actions/checkout@v2
19 |
20 | - name: Set up Python
21 | uses: actions/setup-python@v2
22 | with:
23 | python-version: '3.x'
24 |
25 | - name: Install dependencies
26 | run: |
27 | python -m pip install --upgrade pip
28 | pip install beautifulsoup4
29 |
30 | - name: Run OPML generation script
31 | run: python transform_to_opml.py
32 |
33 | - name: List OPML files
34 | id: list_opml_files
35 | run: |
36 | REPO_NAME=$(basename $GITHUB_REPOSITORY)
37 | BASE_URL="https://${{ github.actor }}.github.io/${REPO_NAME}"
38 | for FILE in *.opml; do
39 | echo "${BASE_URL}/${FILE}" >> opml_urls.txt
40 | done
41 | cat opml_urls.txt
42 |
43 | - name: Deploy to GitHub Pages
44 | uses: peaceiris/actions-gh-pages@v3
45 | with:
46 | github_token: ${{ secrets.GITHUB_TOKEN }}
47 | publish_dir: ./
48 | exclude_assets: |
49 | .github/**
50 | README.md
51 | transform_to_opml.py
52 |
53 | - name: Display OPML URLs
54 | run: |
55 | echo "OPML dosyalarının URL'leri:"
56 | cat opml_urls.txt
57 |
58 | - name: Upload grouped OPML file
59 | uses: actions/upload-artifact@v3
60 | with:
61 | name: grouped-feeds
62 | path: grouped_feeds.opml
63 |
64 | - name: Upload individual OPML files
65 | uses: actions/upload-artifact@v3
66 | with:
67 | name: individual-feeds
68 | path: '*.opml'
69 | if-no-files-found: error
70 |
71 | - name: Upload OPML URLs
72 | uses: actions/upload-artifact@v3
73 | with:
74 | name: opml-urls
75 | path: opml_urls.txt
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # RSS Bağlantıları
2 |
3 | **Kategoriler:**
4 | - [Bilim](#bilim)
5 | - [Teknoloji](#teknoloji)
6 | - [Eğlence](#eğlence)
7 | - [Felsefe](#felsefe)
8 | - [Spor](#spor)
9 | - [Gündem](#gündem)
10 |
11 |
12 | # Bilim
13 |
14 | | Site Adı | RSS Bağlantısı |
15 | |:-------- | -----------:|
16 | | Arkeofili | https://arkeofili.com/feed/ |
17 | | Beyinsizler | https://beyinsizler.net/feed/ |
18 | | Bilim Günlüğü | https://www.bilimgunlugu.com/feed/ |
19 | | Bilim ve Gelecek | https://bilimvegelecek.com.tr/index.php/feed/ |
20 | | Bilimoloji | https://www.bilimoloji.com/feed/ |
21 | | Bilimup | https://www.bilimup.com/rss.xml |
22 | | Çılgın Fizikçiler ve Bilim İnsanları | https://cilginfizikcilervbi.com/feed/ |
23 | | DijitalX | https://www.dijitalx.com/feed/ |
24 | | Evrim Ağacı | https://evrimagaci.org/rss.xml |
25 | | Tarihli Bilim | https://www.tarihlibilim.com/feed/ |
26 | | Fizikist | https://www.fizikist.com/feed |
27 | | Gerçek Bilim | https://www.gercekbilim.com/feed/ |
28 | | Gelecek Bilimde | https://gelecekbilimde.net/feed/ |
29 | | Herkese Bilim Teknoloji | https://www.herkesebilimteknoloji.com/feed |
30 | | Kozmik Anafor | https://www.kozmikanafor.com/feed/ |
31 | | Matematiksel | https://www.matematiksel.org/feed |
32 | | Moletik | https://moletik.com/feed/ |
33 | | Molekülce | https://www.molekulce.com/feed/ |
34 | | Popular Science | https://popsci.com.tr/feed/ |
35 | | Sarkaç | https://sarkac.org/feed/ |
36 | | Sinirbilim | https://sinirbilim.org/feed/ |
37 | | SZC Sağlık | https://www.sozcu.com.tr/feeds-rss-category-saglik |
38 |
39 | # Teknoloji
40 |
41 | | Site Adı | RSS Bağlantısı |
42 | |:-------- | -----------:|
43 | | CHIP Online | https://www.chip.com.tr/rss |
44 | | Donanım Haber | https://www.donanimhaber.com/rss/tum/ |
45 | | İndir | https://www.indir.com/haber/feed/ |
46 | | LOG | https://www.log.com.tr/feed/ |
47 | | Megabayt | https://www.megabayt.com/rss |
48 | | Shiftdelete | https://shiftdelete.net/feed |
49 | | Techolay | https://techolay.net/feed/ |
50 | | Technopat | https://www.technopat.net/feed/ |
51 | | Teknoblog | http://www.teknoblog.com/feed/ |
52 | | Teknolojioku | https://www.teknolojioku.com/export/rss |
53 | | TeknoBurada | https://www.teknoburada.net/feed/ |
54 | | Tam İndir | http://feeds.feedburner.com/tamindir/stream |
55 | | Webrazzi | https://webrazzi.com/feed |
56 |
57 | # Eğlence
58 |
59 | | Site Adı | RSS Bağlantısı |
60 | |:-------- | -----------:|
61 | | Atarita | https://www.atarita.com/feed/ |
62 | | Bigumigu | https://bigumigu.com/feed/ |
63 | | Bilimkurgu Kulübü | https://www.bilimkurgukulubu.com/feed/ |
64 | | FRPNET | https://frpnet.net/feed |
65 | | Geekyapar | https://geekyapar.com/feed/ |
66 | | Kayıp Rıhtım | https://kayiprihtim.com/feed/ |
67 | | LeaderGamer | https://leadergamer.com.tr/feed |
68 | | ListeList | https://listelist.com/feed/ |
69 | | Onedio | https://onedio.com/Publisher/publisher-daily.rss |
70 | | The Geyik | http://www.thegeyik.com/feed/ |
71 | | Turkmmo | https://www.turkmmo.com/feed |
72 | | Turuncu Levye | https://www.turunculevye.com/feed/ |
73 | | Webtekno | https://www.webtekno.com/rss.xml |
74 |
75 | # Felsefe
76 |
77 | | Site Adı | RSS Bağlantısı |
78 | |:-------- | -----------:|
79 | | Cafrande | https://www.cafrande.org/feed/ |
80 | | Çekiçle Felsefe | https://cekiclefelsefe.com/feed/ |
81 | | Kualia | https://kualiafelsefedergisi.com/feed/ |
82 | | Manifold | https://manifold.press/rss |
83 | | Mesail | https://www.mesail.org/feed/ |
84 | | Öncül | https://onculanalitikfelsefe.com/feed/ |
85 | | Sosyal Bilimler | https://www.sosyalbilimler.org/feed/ |
86 | | Tarihli Sanat | https://www.tarihlisanat.com/feed/ |
87 | | Terrabayt | https://terrabayt.com/feed |
88 | | Vesaire | https://vesaire.org/feed |
89 | | 10layn | https://10layn.com/feed/ |
90 |
91 | # Spor
92 |
93 | | Site Adı | RSS Bağlantısı |
94 | |:-------- | -----------:|
95 | | A Spor | https://www.aspor.com.tr/rss/anasayfa.xml |
96 | | AjansSpor | https://ajansspor.com/rss |
97 | | Fotomaç | https://www.fotomac.com.tr/rss/anasayfa.xml |
98 | | NTV Spor | https://www.ntvspor.net/rss |
99 |
100 | # Gündem
101 |
102 | | Site Adı | RSS Bağlantısı |
103 | |:-------- | -----------:|
104 | | A Haber | https://www.ahaber.com.tr/rss/gundem.xml |
105 | | Açık Gazete | http://www.acikgazete.com/feed/ |
106 | | Akşam | https://www.aksam.com.tr/rss/rss.asp |
107 | | Amerikanın Sesi | https://www.voaturkce.com/api/ |
108 | | Anadolu Ajansı | https://www.aa.com.tr/tr/rss/default?cat=guncel |
109 | | Artı Gerçek | https://artigercek.com/service/rss.php |
110 | | BBC Türkçe | https://feeds.bbci.co.uk/turkce/rss.xml |
111 | | Bianet | https://bianet.org/biamag.rss |
112 | | Bir Gazete | https://www.birgazete.com/feed |
113 | | BirGün | https://www.birgun.net/rss/home |
114 | | CNN Türk | https://www.cnnturk.com/feed/rss/all/news |
115 | | Cumhuriyet | https://www.cumhuriyet.com.tr/rss/son_dakika.xml |
116 | | Demokrat Haber | https://www.demokrathaber.org/rss |
117 | | Diken | https://www.diken.com.tr/feed/ |
118 | | Diriliş Postası | https://www.dirilispostasi.com/rss |
119 | | Diyanet Haber | https://www.diyanethaber.com.tr/rss |
120 | | Doğru Haber | https://dogruhaber.com.tr/rss |
121 | | Dokuz8 Haber | https://www.dokuz8haber.net/rss |
122 | | Dünya | https://www.dunya.com/rss?dunya |
123 | | DW Haber | https://rss.dw.com/rdf/rss-tur-all |
124 | | En Politik | https://www.enpolitik.com/rss.xml |
125 | | En Son Haber | https://www.ensonhaber.com/rss/ensonhaber.xml |
126 | | Evrensel | https://www.evrensel.net/rss/haber.xml |
127 | | F5 Haber | https://www.f5haber.com/export/rss |
128 | | Gazete Duvar | https://www.gazeteduvar.com.tr/export/rss |
129 | | Gazete Vatan | https://www.gazetevatan.com/rss/anasayfa-manset.xml |
130 | | Gerçek Gündem | https://www.gercekgundem.com/rss |
131 | | Haber 3 | https://www.haber3.com/rss |
132 | | Haber Global | https://haberglobal.com.tr/rss |
133 | | Habertürk | https://www.haberturk.com/rss |
134 | | Halk TV | https://halktv.com.tr/service/rss.php |
135 | | Hürriyet | http://www.hurriyet.com.tr/rss/anasayfa |
136 | | İklim Haber | https://www.iklimhaber.org/feed/ |
137 | | Independent | https://www.indyturk.com/rss.xml |
138 | | İnternet Haber | https://www.internethaber.com/rss |
139 | | Kısa Dalga | https://kisadalga.net/service/rss.php |
140 | | Medya Gazete | https://www.medyagazete.com/rss/genel-0 |
141 | | Mynet | https://www.mynet.com/haber/rss/sondakika |
142 | | Muhalif | https://www.muhalif.com.tr/rss/genel-0 |
143 | | Net Haber | https://www.nethaber.com/rss |
144 | | NTV | https://www.ntv.com.tr/gundem.rss |
145 | | Önce Vatan Gazetesi | https://www.oncevatan.com.tr/rss.php |
146 | | Sabah | https://www.sabah.com.tr/rss/gundem.xml |
147 | | Sözcü | https://www.sozcu.com.tr/feeds-rss-category-sozcu |
148 | | soL Haber | https://haber.sol.org.tr/rss.xml |
149 | | Star | https://www.star.com.tr/rss/rss.asp |
150 | | T24 | https://t24.com.tr/rss |
151 | | TRT Haber | https://www.trthaber.com/sondakika.rss |
152 | | Yeni Akit | https://www.yeniakit.com.tr/rss/haber/gundem |
153 | | Yeni Asır Gazetesi | https://www.yeniasir.com.tr/rss/anasayfa.xml |
154 | | Yeni Şafak | https://www.yenisafak.com/rss?xml=gundem |
155 | | Yeşil Gazete | https://yesilgazete.org/feed/ |
156 | | Yurt Gazetesi | https://www.yurtgazetesi.com.tr/service/rss.php |
157 |
--------------------------------------------------------------------------------
/transform_to_opml.py:
--------------------------------------------------------------------------------
1 | import os
2 | import re
3 |
4 | def read_readme(file_path):
5 | with open(file_path, 'r', encoding='utf-8') as file:
6 | return file.read()
7 |
8 | def parse_readme(content):
9 | categories = {}
10 | current_category = None
11 | lines = content.split('\n')
12 |
13 | for line in lines:
14 | if line.startswith('# '):
15 | current_category = line[2:].strip()
16 | categories[current_category] = []
17 | elif line.startswith('|') and current_category:
18 | match = re.search(r'(https?://\S+)', line)
19 | if match:
20 | categories[current_category].append(match.group(1))
21 |
22 | return categories
23 |
24 | def generate_opml(categories):
25 | opml_content = '\n'
26 | opml_content += '\n'
27 | opml_content += ' \n'
28 | opml_content += ' RSS Feeds\n'
29 | opml_content += ' \n'
30 | opml_content += ' \n'
31 |
32 | for category, links in categories.items():
33 | opml_content += f' \n'
34 | for link in links:
35 | opml_content += f' \n'
36 | opml_content += ' \n'
37 |
38 | opml_content += ' \n'
39 | opml_content += '\n'
40 |
41 | return opml_content
42 |
43 | def generate_individual_opml(categories):
44 | for category, links in categories.items():
45 | opml_content = '\n'
46 | opml_content += '\n'
47 | opml_content += ' \n'
48 | opml_content += f' {category} RSS Feeds\n'
49 | opml_content += ' \n'
50 | opml_content += ' \n'
51 | for link in links:
52 | opml_content += f' \n'
53 | opml_content += ' \n'
54 | opml_content += '\n'
55 |
56 | save_opml(f'{category.lower().replace(" ", "_")}_feeds.opml', opml_content)
57 |
58 | def save_opml(file_path, content):
59 | with open(file_path, 'w', encoding='utf-8') as file:
60 | file.write(content)
61 |
62 | def main():
63 | readme_path = 'README.md'
64 | grouped_opml_path = 'grouped_feeds.opml'
65 |
66 | if not os.path.exists(readme_path):
67 | print(f'Error: {readme_path} not found.')
68 | return
69 |
70 | content = read_readme(readme_path)
71 | categories = parse_readme(content)
72 |
73 | # Generate and save grouped OPML file
74 | grouped_opml_content = generate_opml(categories)
75 | save_opml(grouped_opml_path, grouped_opml_content)
76 |
77 | # Generate and save individual OPML files for each category
78 | generate_individual_opml(categories)
79 |
80 | print('OPML files saved.')
81 |
82 | if __name__ == '__main__':
83 | main()
84 |
--------------------------------------------------------------------------------