Skip to content
This repository was archived by the owner on Dec 1, 2025. It is now read-only.

Commit 4f0d811

Browse files
authored
Merge pull request #13 from xeyossr/feat/openanime-fansub-select
OpenAnime Fansub seçimi
2 parents 9c2f52a + 0d8e222 commit 4f0d811

File tree

11 files changed

+261
-133
lines changed

11 files changed

+261
-133
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,4 +38,5 @@
3838
Thumbs.db
3939

4040
# Binary file
41+
/build
4142
anitr-cli

Makefile

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,22 @@
11
GO=go
22
BINARY_NAME=anitr-cli
3+
BUILD_DIR=./build
34
INSTALL_DIR=/usr/bin
45

56
mod-tidy:
67
$(GO) mod tidy
78

89
build: mod-tidy
9-
$(GO) build -o $(BINARY_NAME)
10+
$(GO) build -o $(BUILD_DIR)/$(BINARY_NAME)
1011

1112
run: build
1213
./$(BINARY_NAME)
1314

1415
install: build
15-
chmod +x $(BINARY_NAME)
16-
sudo mv $(BINARY_NAME) $(INSTALL_DIR)/$(BINARY_NAME)
16+
chmod +x $(BUILD_DIR)/$(BINARY_NAME)
17+
sudo mv $(BUILD_DIR)/$(BINARY_NAME) $(INSTALL_DIR)/$(BINARY_NAME)
1718

1819
clean:
19-
rm -f $(BINARY_NAME)
20+
rm -rf $(BUILD_DIR)
2021

2122
all: mod-tidy build install

README.md

Lines changed: 84 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -1,106 +1,120 @@
1-
# anitr-cli
2-
31
<div align="center">
4-
5-
**Süper Hızlı** bir şekilde anime araması yapabileceğiniz ve istediğiniz animeyi Türkçe altyazılı izleyebileceğiniz terminal aracı 💫
62

7-
[![Github_Release](https://img.shields.io/github/v/release/xeyossr/anitr-cli?style=for-the-badge&include_prereleases&label=GitHub%20Release)](https://github.com/xeyossr/anitr-cli/releases) [![AUR](https://img.shields.io/aur/version/anitr-cli?style=for-the-badge)](https://aur.archlinux.org/packages/anitr-cli) [![Windows_Fork](https://img.shields.io/github/v/release/mstsecurity/anitr-cli-windows?include_prereleases&display_name=release&label=Windows%20Fork&style=for-the-badge)](https://github.com/mstsecurity/anitr-cli-windows)
3+
<h1>anitr-cli</h1>
4+
<h3>Terminalde Türkçe altyazılı anime izleme ve arama aracı 🚀</h3>
85

9-
---
6+
<img src="https://raw.githubusercontent.com/xeyossr/anitr-cli/main/assets/anitr-preview.gif" alt="anitr-cli preview" width="300"/>
7+
8+
<p>
9+
<a href="https://github.com/xeyossr/anitr-cli/releases">
10+
<img src="https://img.shields.io/github/v/release/xeyossr/anitr-cli?style=for-the-badge&include_prereleases&label=GitHub%20Sürüm">
11+
</a>
12+
<a href="https://aur.archlinux.org/packages/anitr-cli">
13+
<img src="https://img.shields.io/aur/version/anitr-cli?style=for-the-badge&label=AUR">
14+
</a>
15+
<a href="https://github.com/mstsecurity/anitr-cli-windows">
16+
<img src="https://img.shields.io/github/v/release/mstsecurity/anitr-cli-windows?include_prereleases&label=Windows%20Fork&style=for-the-badge">
17+
</a>
18+
</p>
1019

1120
</div>
1221

13-
## 🌟 Özellikler
14-
- **AnimeCix** ve **OpenAnime** desteği: Favori anime sitelerinden animelerinizi izleyin!
15-
- **TUI ve Rofi UI**: Terminal veya minimalist GUI arayüzü ile kullanım.
16-
- **Discord RPC**: İzlediğiniz anime bilgilerini Discord profilinizde gösterin, arkadaşlarınızla paylaşın.
22+
---
23+
24+
## 🎬 Özellikler
1725

18-
## 💻 Kurulum
26+
- **AnimeCix ve OpenAnime Entegrasyonu**: Popüler anime platformlarından hızlı arama ve izleme imkanı.
27+
- **Fansub Seçimi**: OpenAnime üzerinden izlerken favori çeviri grubunuzu seçme özgürlüğü.
28+
- **Çoklu Arayüz Desteği**: Terminal tabanlı TUI ve minimalist grafik arayüz (Rofi UI) seçenekleri.
29+
- **Discord Rich Presence**: İzlediğiniz animeyi Discord profilinizde paylaşarak arkadaşlarınızla etkileşimde kalın.
30+
- **Otomatik Güncelleme Kontrolü**: Uygulama her başlatıldığında yeni sürüm olup olmadığını kontrol eder.
1931

20-
### 🐧 Linux Kullanıcıları
32+
---
2133

22-
Eğer Arch tabanlı bir dağıtım kullanıyorsanız, [AUR](https://aur.archlinux.org/packages/anitr-cli) üzerinden tek bir komut ile indirebilirsiniz:
34+
## ⚡ Kurulum
35+
36+
### 🐧 Linux
37+
38+
#### Arch tabanlı dağıtımlar (AUR):
2339

2440
```bash
2541
yay -S anitr-cli
2642
```
2743

28-
Eğer Arch tabanlı olmayan bir dağıtım kullanıyorsanız, **en son sürümü** indirmek için aşağıdaki komutları kullanabilirsiniz:
44+
#### Diğer Linux dağıtımları:
45+
2946
```bash
3047
git clone https://github.com/xeyossr/anitr-cli.git
3148
cd anitr-cli
3249
make install
3350
```
3451

35-
> Not: `anitr-cli`'yi kurabilmek için sisteminizde şu paketlerin kurulu olması gerekir:
36-
>
37-
> **Derleme:** `go`, `git`, `make`
38-
> **Kullanım (Zorunlu):** `mpv`
39-
> **İsteğe bağlı: rofi (Rofi arayüzünü kullanmak istiyorsanız)**
40-
>
41-
> Bu paketleri aşağıdaki komutlarla sisteminize kurabilirsiniz:
42-
>
43-
> **Debian / Ubuntu tabanlı sistemler:**
44-
> ```sudo
45-
> sudo apt update
46-
> sudo apt install golang git make mpv rofi
47-
> ```
48-
>
49-
> **Arch / Manjaro:**
50-
> ```sudo
51-
> sudo pacman -S go git make mpv rofi
52-
> ```
53-
>
54-
> **Fedora:**
55-
> ```bash
56-
> sudo dnf install golang git make mpv rofi
57-
> ```
58-
>
59-
> **openSUSE:**
60-
> ```bash
61-
> sudo zypper install go git make mpv rofi
62-
> ```
63-
> Ardından `git clone`, `make install` adımlarını uygulayarak kurulumu tamamlayabilirsiniz.
52+
> **Gereksinimler:**
53+
> Derleme: `go`, `git`, `make`
54+
> Kullanım: `mpv`
55+
> İsteğe bağlı: `rofi` (Rofi arayüzü için)
56+
57+
**Paketleri yüklemek için:**
58+
59+
- **Debian/Ubuntu:**
60+
```bash
61+
sudo apt update
62+
sudo apt install golang git make mpv rofi
63+
```
64+
- **Arch/Manjaro:**
65+
```bash
66+
sudo pacman -S go git make mpv rofi
67+
```
68+
- **Fedora:**
69+
```bash
70+
sudo dnf install golang git make mpv rofi
71+
```
72+
- **openSUSE:**
73+
```bash
74+
sudo zypper install go git make mpv rofi
75+
```
76+
6477
---
6578

66-
#### Güncelleme
79+
### 🔄 Güncelleme
6780

68-
Her çalıştırdığınızda yeni bir güncelleme olup olmadığı denetlenecektir. Eğer güncelleme mevcutsa, şu komutla güncelleyebilirsiniz:
81+
- **AUR ile kurduysanız:**
82+
```bash
83+
yay -Sy anitr-cli
84+
```
85+
- **Manuel kurulum yaptıysanız:**
86+
Depoyu güncelleyip tekrar `make install` komutunu çalıştırın.
6987

70-
- **AUR** üzerinden kurulum yaptıysanız:
71-
```bash
72-
yay -Sy anitr-cli
73-
```
74-
75-
- **Manuel** kurulum yaptıysanız:
76-
> Eğer manuel kurulum yaptıysanız, güncellemeleri manuel olarak yapmanız gerekmektedir.
88+
---
7789

78-
### 🪟 Windows Kullanıcıları
90+
### 🪟 Windows
7991

80-
Bu proje Linux için geliştirilmiştir. **Windows kullanıcıları**, [anitr-cli-windows](https://github.com/mstsecurity/anitr-cli-windows) forkunu kullanabilirler:
92+
Bu proje Linux için geliştirilmiştir. Windows kullanıcıları için [anitr-cli-windows](https://github.com/mstsecurity/anitr-cli-windows) forkunu kullanabilirsiniz.
8193

82-
> 🔗 [https://github.com/mstsecurity/anitr-cli-windows](https://github.com/mstsecurity/anitr-cli-windows)
94+
---
8395

84-
## 👾 Kullanım
96+
## 🚀 Kullanım
8597

8698
```bash
87-
💫 Terminalden Türkçe anime izleme aracı
99+
anitr-cli [bayraklar]
100+
```
88101

89-
Usage:
90-
anitr-cli [flags]
102+
**Bayraklar:**
91103

92-
Flags:
93-
--disable-rpc Discord Rich Presence özelliğini devre dışı bırakır.
94-
-h, --help help for anitr-cli
95-
--rofi Rofi arayüzü ile başlatır.
96-
--rofi-flags string Rofi için flag'ler
97-
--version Versiyon bilgisi.
98-
```
104+
- `--disable-rpc` Discord Rich Presence özelliğini kapatır.
105+
- `--rofi` Rofi arayüzü ile başlatır.
106+
- `--rofi-flags <string>` Rofi için ek parametreler.
107+
- `--version` Sürüm bilgisini gösterir.
108+
- `-h, --help` Yardım menüsü.
109+
110+
---
99111

100-
## 🚩 Sorunlar ve Katkı
112+
## 💡 Sorunlar & Katkı
101113

102-
Herhangi bir hata veya geliştirme öneriniz için lütfen bir [**issue**](https://github.com/xeyossr/anitr-cli/issue) açın.
114+
Her türlü hata, öneri veya katkı için [issue](https://github.com/xeyossr/anitr-cli/issues) açabilirsiniz. Katkılarınızı bekliyoruz!
115+
116+
---
103117

104-
## 📄 Lisans
118+
## 📜 Lisans
105119

106-
Bu proje [GNU GPLv3](https://www.gnu.org/licenses/gpl-3.0.en.html) lisansı ile lisanslanmıştır. Yazılımı bu lisansın koşulları altında kullanmakta, değiştirmekte ve dağıtmakta özgürsünüz. Daha fazla ayrıntı için lütfen [LICENSE](LICENSE) dosyasına bakın.
120+
Bu proje [GNU GPLv3](https://www.gnu.org/licenses/gpl-3.0.en.html) ile lisanslanmıştır. Detaylar için [LICENSE](LICENSE)

assets/anitr-preview.gif

16 MB
Loading

aur/.SRCINFO

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
pkgbase = anitr-cli
22
pkgdesc = 💫 Terminalden Türkçe anime izleme aracı
3-
pkgver = 4.2.0
3+
pkgver = 4.3.0
44
pkgrel = 1
55
url = https://github.com/xeyossr/anitr-cli
66
arch = x86_64
@@ -12,7 +12,7 @@ pkgbase = anitr-cli
1212
optdepends = rofi-wayland: for --rofi mode (recommended for Wayland users)
1313
provides = anitr-cli
1414
conflicts = anitr-cli
15-
source = git+https://github.com/xeyossr/anitr-cli.git#tag=v4.2.0
15+
source = git+https://github.com/xeyossr/anitr-cli.git#tag=v4.3.0
1616
sha256sums = SKIP
1717

1818
pkgname = anitr-cli

aur/PKGBUILD

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# Maintainer: kamisaki
22
# Description: 💫 Terminalden Türkçe anime izleme aracı
33
pkgname=anitr-cli
4-
pkgver=4.2.0
4+
pkgver=4.3.0
55
pkgrel=1
66
pkgdesc="💫 Terminalden Türkçe anime izleme aracı"
77
arch=('x86_64')

internal/models/models.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,12 @@ type Episode struct {
3333
Extra map[string]interface{}
3434
}
3535

36+
type Fansub struct {
37+
ID *string
38+
Name *string
39+
SecureName *string
40+
}
41+
3642
type WatchParams struct {
3743
Slug *string
3844
Url *string
@@ -41,6 +47,13 @@ type WatchParams struct {
4147
Extra *map[string]interface{}
4248
}
4349

50+
type FansubParams struct {
51+
Slug *string
52+
Id *int
53+
SeasonNum *int
54+
EpisodeNum *int
55+
}
56+
4457
type SeasonParams struct {
4558
Slug *string
4659
Id *int

internal/sources/openanime/openanime.go

Lines changed: 46 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -142,48 +142,35 @@ func (o OpenAnime) GetEpisodesData(params models.EpisodeParams) ([]models.Episod
142142
return episodes, nil
143143
}
144144

145-
func (o OpenAnime) GetWatchData(req models.WatchParams) ([]models.Watch, error) {
146-
if req.Slug == nil || req.Extra == nil {
147-
return nil, fmt.Errorf("slug veya ekstra bilgiler eksik")
145+
func (o OpenAnime) GetFansubsData(params models.FansubParams) ([]models.Fansub, error) {
146+
if params.Slug == nil || params.SeasonNum == nil || params.EpisodeNum == nil {
147+
return nil, fmt.Errorf("slug, sezon numarası veya bölüm numarası eksik")
148148
}
149149

150-
slug := *req.Slug
151-
extra := *req.Extra
150+
slug := *params.Slug
151+
seasonNum := *params.SeasonNum
152+
episodeNum := *params.EpisodeNum
152153

153-
seasonNum, ok := extra["season_num"].(int)
154-
if !ok {
155-
return nil, fmt.Errorf("season_num geçersiz veya eksik")
156-
}
157-
158-
episodeNum, ok := extra["episode_num"].(int)
159-
if !ok {
160-
return nil, fmt.Errorf("episode_num geçersiz veya eksik")
161-
}
162-
163-
baseURL := fmt.Sprintf("%s/anime/%s/season/%d/episode/%d", configOpenAnime.BaseUrl, slug, int(seasonNum), int(episodeNum))
164-
data, err := internal.GetJson(baseURL, configOpenAnime.HttpHeaders)
154+
url := fmt.Sprintf("%s/anime/%s/season/%d/episode/%d", configOpenAnime.BaseUrl, slug, seasonNum, episodeNum)
155+
data, err := internal.GetJson(url, configOpenAnime.HttpHeaders)
165156
if err != nil {
166-
return nil, fmt.Errorf("bölüm verisi alınamadı: %w", err)
157+
return nil, fmt.Errorf("fansub verileri alınamadı: %w", err)
167158
}
168159

169-
// FANSUBS
170160
rawFansubs, ok := data.(map[string]interface{})["fansubs"].([]interface{})
171161
if !ok {
172-
return nil, fmt.Errorf("altyazılar bulunamadı veya beklenen formatta değil")
162+
return nil, fmt.Errorf("fansubs verisi eksik veya hatalı")
173163
}
174164

175-
var fansubs []map[string]string
165+
var fansubs []models.Fansub
176166
for _, f := range rawFansubs {
177167
fm, ok := f.(map[string]interface{})
178168
if !ok {
179169
continue
180170
}
181171

182172
is4K, ok := fm["is4K"].(bool)
183-
if !ok {
184-
return nil, fmt.Errorf("altyazı 'is4K' bilgisi eksik")
185-
}
186-
if is4K {
173+
if !ok || is4K {
187174
continue
188175
}
189176

@@ -192,23 +179,48 @@ func (o OpenAnime) GetWatchData(req models.WatchParams) ([]models.Watch, error)
192179
secureName, secureOK := fm["secureName"].(string)
193180

194181
if !idOK || !nameOK || !secureOK {
195-
return nil, fmt.Errorf("altyazı bilgisi eksik: %+v", fm)
182+
return nil, fmt.Errorf("fansub bilgisi eksik: %+v", fm)
196183
}
197184

198-
fansubs = append(fansubs, map[string]string{
199-
"id": id,
200-
"name": name,
201-
"secureName": secureName,
185+
fansubs = append(fansubs, models.Fansub{
186+
ID: &id,
187+
Name: &name,
188+
SecureName: &secureName,
202189
})
203190
}
204191

205192
if len(fansubs) == 0 {
206-
return nil, fmt.Errorf("geçerli altyazı bulunamadı (yalnızca 4K olabilir)")
193+
return nil, fmt.Errorf("geçerli fansub bulunamadı")
194+
}
195+
196+
return fansubs, nil
197+
}
198+
199+
func (o OpenAnime) GetWatchData(req models.WatchParams) ([]models.Watch, error) {
200+
if req.Slug == nil || req.Extra == nil {
201+
return nil, fmt.Errorf("slug veya ekstra bilgiler eksik")
207202
}
208203

209-
// GET VIDEO STREAMS
210-
videoURL := fmt.Sprintf("%s?fansub=%s", baseURL, fansubs[0]["id"])
211-
data, err = internal.GetJson(videoURL, configOpenAnime.HttpHeaders)
204+
slug := *req.Slug
205+
extra := *req.Extra
206+
207+
seasonNum, ok := extra["season_num"].(int)
208+
if !ok {
209+
return nil, fmt.Errorf("season_num geçersiz veya eksik")
210+
}
211+
212+
episodeNum, ok := extra["episode_num"].(int)
213+
if !ok {
214+
return nil, fmt.Errorf("episode_num geçersiz veya eksik")
215+
}
216+
217+
baseURL := fmt.Sprintf("%s/anime/%s/season/%d/episode/%d", configOpenAnime.BaseUrl, slug, int(seasonNum), int(episodeNum))
218+
219+
fansubs := extra["fansubs"].([]models.Fansub)
220+
selectedFansubId := extra["selected_fansub_id"].(int)
221+
222+
videoURL := fmt.Sprintf("%s?fansub=%s", baseURL, *fansubs[selectedFansubId].ID)
223+
data, err := internal.GetJson(videoURL, configOpenAnime.HttpHeaders)
212224
if err != nil {
213225
return nil, fmt.Errorf("video bağlantıları alınamadı: %w", err)
214226
}

0 commit comments

Comments
 (0)