eksisozluk-api
Version:
Latest unofficial eksisozluk api
1,392 lines (1,113 loc) • 43.8 kB
Markdown
<a name="top"></a>
# eksisozluk-api v0.0.1
Unofficial eksisozluk api
# giris
<hr>
<h2>Aciklama</h2>
<p>ekşisözlük için geliştirilmiş resmi olmayan api.</p>
<p><strong>TLDR sondadir eger dokumantasyonu okumak istemiyorsaniz atlayabilirsiniz.</strong></p>
<p><strong>Not:</strong> Dokumantasyondaki port (3000), config dosyasinda kullanilmis default porttur.
Eger farkli bir port seciliyse goz onunde bulundurun.</p>
<h3>Kurulum</h3>
<h4>Git ile</h4>
<p>Terminalde sırasıyla şu komutları çalıştırın:</p>
<pre><code class="language-bash">git clone https://github.com/otuva/eksisozluk-api
cd eksisozluk-api
npm i
npm start
</code></pre>
<h4>NPM ile</h4>
<p>Local olarak</p>
<pre><code class="language-bash">npm i eksisozluk-api # install
npx eksisozluk # run
</code></pre>
<p>Global Olarak</p>
<pre><code class="language-bash">sudo npm install eksisozluk-api -g # install
eksisozluk # run
</code></pre>
<h3>Node.js API</h3>
<p>npm ile kurup dokumantasyonda bulunan tum fonksiyonlari kullanabilirsiniz.
Ornek:</p>
<pre><code class="language-js">const eksisozluk = require('eksisozluk-api');
eksisozluk.entry.getEntry('1').then(
(data) => {
console.log(data);
}
);
eksisozluk.user.getUser('ssg').then(
(data) => {
console.log(data);
}
);
eksisozluk.startServer();
</code></pre>
<hr>
# Table of contents
- [arama](#arama)
- [arama sonucunu getir.](#arama-sonucunu-getir.)
- [otomatik tamamlamayi getir.](#otomatik-tamamlamayi-getir.)
- [balk](#balk)
- [başlıkları getir.](#başlıkları-getir.)
- [kanallari getir.](#kanallari-getir.)
- [tek başlık getir.](#tek-başlık-getir.)
- [debe](#debe)
- [debe getir.](#debe-getir.)
- [entry](#entry)
- [tek entry getir.](#tek-entry-getir.)
- [etc](#etc)
- [tum kanallari getir.](#tum-kanallari-getir.)
- [kullanici](#kullanici)
- [entry sayfasini getir.](#entry-sayfasini-getir.)
- [kullanici gorsellerini getir.](#kullanici-gorsellerini-getir.)
- [tek kullanıcı getir.](#tek-kullanıcı-getir.)
___
# <a name='arama'></a> arama
## <a name='arama-sonucunu-getir.'></a> arama sonucunu getir.
[Back to top](#top)
<p>site içi arama yapan endpoint.</p> <p>boslukla ayrilmis birden cok kelime veya tek aranabilir</p> <ul> <li> <p><code>api/index/search/mayonez</code></p> </li> <li> <p><code>api/index/search/ketcap mayonez</code></p> </li> </ul> <p>gibi.</p> <p>Sayfa parametresi opsiyonel olup diger sayfalari getirmek icin url sonuna /SAYI ekleyebilirsiniz.</p>
```
GET /api/index/search/:query/:page?
```
### Parameters - `Parameter`
| Name | Type | Description |
|----------|------------|---------------------------------------|
| query | `String` | <p>arama kelimesi/kelimeleri</p> |
| page | `Number` | **optional** <p>getirilecek sayfa</p>_Default value: 1_<br> |
### Examples
Example curl:
```curl
curl -i http://localhost:3000/api/index/search/2022
```
Example curl sayfa:
```curl
curl -i http://localhost:3000/api/index/search/2022/2
```
Example python:
```python
import requests as r
req = r.get("http://localhost:3000/api/index/search/2022")
```
Example axios(js):
```javascript
req = axios.get("http://localhost:3000/api/index/search/2022").then(...)
```
### Success response
#### Success response - `200`
| Name | Type | Description |
|----------|------------|---------------------------------------|
| totalTopicCount | `Number` | <p>toplam baslik adeti.</p> |
| totalPageCount | `Number` | <p>toplam kac sayfa baslik oldugu.</p> |
| topics | `Object[]` | <p>başlık objelerinin arrayi.</p> |
| topics.id | `Number` | <p>basligin id'si</p> |
| topics.title | `String` | <p>basligin ismi</p> |
| topics.topicSlug | `String` | <p>baslik url slug hali</p> |
| topics.topicUrl | `String` | <p>basligin full urli</p> |
| topics.totalEntryCount | `Number` | <p>basliktaki toplam entry sayisi</p> |
### Success response example
#### Success response example - `Success-Response:`
```json
{
"totalTopicCount": 52,
"totalPageCount": 2,
"topics": [
{
"id": 6398332,
"title": "ketçap mayonez hardal üçlüsündeki hardalın durumu",
"slug": "/ketcap-mayonez-hardal-uclusundeki-hardalin-durumu--6398332",
"topicUrl": "https://eksisozluk.com/ketcap-mayonez-hardal-uclusundeki-hardalin-durumu--6398332",
"totalEntryCount": 180
},
{
"id": 7110782,
"title": "en iyi ketçap mayonez markası",
"slug": "/en-iyi-ketcap-mayonez-markasi--7110782",
"topicUrl": "https://eksisozluk.com/en-iyi-ketcap-mayonez-markasi--7110782",
"totalEntryCount": 165
},
...
]
}
```
### Error response
#### Error response - `Error 4xx`
| Name | Type | Description |
|----------|------------|---------------------------------------|
| SearchReturnedNoResults | | <p>Arama sonucu bos dondu.</p> |
### Error response example
#### Error response example - `api/index/search/dsadsaads:`
```json
{"error":"Search returned no results"}
```
## <a name='otomatik-tamamlamayi-getir.'></a> otomatik tamamlamayi getir.
[Back to top](#top)
<p>Otomatik tamamlama sağlayan endpoint.</p> <p>Return edilen cevaptaki arraylerin ikisi de bos ise hata dondurur degilse eksi sozlukten alinan cevabi direkt olarak dondurur.</p>
```
GET /api/index/autocomplete/:query
```
### Parameters - `Parameter`
| Name | Type | Description |
|----------|------------|---------------------------------------|
| query | `String` | <p>aranan kelime/kelimeler</p> |
### Examples
Example curl:
```curl
curl -i http://localhost:3000/api/index/autocomplete/pena
```
Example python:
```python
import requests as r
req = r.get("http://localhost:3000/api/index/autocomplete/pena")
```
Example axios(js):
```javascript
req = axios.get("http://localhost:3000/api/index/autocomplete/pena").then(...)
```
### Success response
#### Success response - `200`
| Name | Type | Description |
|----------|------------|---------------------------------------|
| Titles | `String[]` | <p>baslik isimlerinin arrayi.</p> |
| Query | `String` | <p>aranan kelime/ler</p> |
| Nicks | `String[]` | <p>kullanici nicklerinin arrayi.</p> |
### Success response example
#### Success response example - `Success-Response:`
```json
{
"Titles": [
"pena",
"pena (video kanalı)",
"pena'daki aldatan sevgili entry canlandırması",
"inaki pena",
...
],
"Query": "pena",
"Nicks": [
"pena",
"pena gibi kaybolsam",
"pena minik plastik garip nesne"
]
}
```
### Error response
#### Error response - `Error 4xx`
| Name | Type | Description |
|----------|------------|---------------------------------------|
| SearchReturnedNoResults | | <p>Arama sonucu bos dondu.</p> |
### Error response example
#### Error response example - `api/index/autocomplete/asd fdsaafsd:`
```json
{"error":"Search returned no results"}
```
# <a name='balk'></a> balk
## <a name='başlıkları-getir.'></a> başlıkları getir.
[Back to top](#top)
<p>Secilen kategorideki (gündem, tarihte bugun vs.) başlıkları getiren endpoint.</p> <p>Sayfa parametresi opsiyonel olup diger sayfalari getirmek icin url sonuna <code>/SAYI</code> ekleyebilirsiniz.</p> <p>Baslik kategorisinin alabilecegi degerler icin gereken parametrelerin altindaki izin verilen degerlere bakiniz.</p> <p>Kanallar icin diger endpointi kullaniniz.</p>
```
GET /api/topic/list/:choice/:page?
```
### Parameters - `Parameter`
| Name | Type | Description |
|----------|------------|---------------------------------------|
| choice | `String` | <p>getirilecek baslik kategorisi</p>_Allowed values: "gundem","sorunsal","tarihte-bugun","basiboslar"_ |
| page | `Number` | **optional** <p>getirilecek sayfa</p>_Default value: 1_<br> |
### Examples
Example curl:
```curl
curl -i http://localhost:3000/api/topic/list/gundem
```
Example curl sayfa:
```curl
curl -i http://localhost:3000/api/topic/list/gundem/2
```
Example python:
```python
import requests as r
req = r.get("http://localhost:3000/api/topic/list/gundem")
```
Example axios(js):
```javascript
req = axios.get("http://localhost:3000/api/topic/list/gundem").then(...)
```
### Success response
#### Success response - `200`
| Name | Type | Description |
|----------|------------|---------------------------------------|
| totalTopicCount | `Number` | <p>toplam baslik adeti.</p> |
| totalPageCount | `Number` | <p>toplam kac sayfa baslik oldugu.</p> |
| topics | `Object[]` | <p>başlık objelerinin arrayi.</p> |
| topics.id | `Number` | <p>basligin id'si</p> |
| topics.title | `String` | <p>basligin ismi</p> |
| topics.topicSlug | `String` | <p>baslik url slug hali</p> |
| topics.topicUrl | `String` | <p>basligin full urli</p> |
| topics.totalEntryCount | `Number` | <p>basliktaki toplam entry sayisi</p> |
### Success response example
#### Success response example - `Success-Response:`
```json
{
"totalTopicCount": 299,
"totalPageCount": 6,
"topics": [
{
"id": 7341070,
"title": "sönmüş kireçle yapılan +18 sanat",
"topicSlug": "/sonmus-kirecle-yapilan-18-sanat--7341070?a=popular",
"topicUrl": "https://eksisozluk.com//sonmus-kirecle-yapilan-18-sanat--7341070?a=popular",
"totalEntryCount": 86
},
{
"id": 7340995,
"title": "türkiye ermenistan sınırı mayın temizliği",
"topicSlug": "/turkiye-ermenistan-siniri-mayin-temizligi--7340995?a=popular",
"topicUrl": "https://eksisozluk.com//turkiye-ermenistan-siniri-mayin-temizligi--7340995?a=popular",
"totalEntryCount": 128
},
...
]
}
```
### Error response
#### Error response - `Error 4xx`
| Name | Type | Description |
|----------|------------|---------------------------------------|
| TopicNotFound | | <p>Aranan kategori gecerli ama hicbir baslik bulunamadi.</p> |
| TopicIsInvalid | | <p>Gecerli bir kategori degil.</p> |
### Error response example
#### Error response example - `api/topic/list/gundem/412:`
```json
{
"error": "Topic not found"
}
```
#### Error response example - `api/topic/list/gundam:`
```json
{
"error": "Topic is invalid"
}
```
## <a name='kanallari-getir.'></a> kanallari getir.
[Back to top](#top)
<p>Secilen kanala ait (haber, bilim vs.) başlıkları getiren endpoint.</p> <p>Sayfa parametresi opsiyonel olup diger sayfalari getirmek icin url sonuna <code>/SAYI</code> ekleyebilirsiniz.</p> <p>Kanal kategorisinin alabilecegi degerler icin gereken parametrelerin altindaki izin verilen degerlere bakiniz.</p> <p>Kanal kategorilerinin turkce karakter icermesine dikkat ediniz. Ornegin 'muzik' kategorisi hata verecekken 'müzik' kategorisi sorunsuz calisacaktir.</p>
```
GET /api/topic/list/channel/:choice/:page?
```
### Parameters - `Parameter`
| Name | Type | Description |
|----------|------------|---------------------------------------|
| choice | `String` | <p>getirilecek baslik kategorisi</p>_Allowed values: "haber","sinema","bilim","eğitim","spoiler","müzik","edebiyat","ekonomi","tarih","yeme-içme","ilişkiler","siyaset","teknoloji","sanat","moda","otomotiv","magazin","ekşi-sözlük","spor","motosiklet","sağlık","oyun","anket","programlama","tv","seyahat","havacılık","troll"_ |
| page | `Number` | **optional** <p>getirilecek sayfa</p>_Default value: 1_<br> |
### Examples
Example curl:
```curl
curl -i http://localhost:3000/api/topic/list/channel/haber
```
Example curl sayfa:
```curl
curl -i http://localhost:3000/api/topic/list/channel/haber/2
```
Example python:
```python
import requests as r
req = r.get("http://localhost:3000/api/topic/list/channel/haber")
```
Example axios(js):
```javascript
req = axios.get("http://localhost:3000/api/topic/list/channel/haber").then(...)
```
### Success response
#### Success response - `200`
| Name | Type | Description |
|----------|------------|---------------------------------------|
| totalTopicCount | `Number` | <p>toplam baslik adeti.</p> |
| totalPageCount | `Number` | <p>toplam kac sayfa baslik oldugu.</p> |
| topics | `Object[]` | <p>başlık objelerinin arrayi.</p> |
| topics.id | `Number` | <p>basligin id'si</p> |
| topics.title | `String` | <p>basligin ismi</p> |
| topics.topicSlug | `String` | <p>baslik url slug hali</p> |
| topics.topicUrl | `String` | <p>basligin full urli</p> |
| topics.totalEntryCount | `Number` | <p>basliktaki toplam entry sayisi</p> |
### Success response example
#### Success response example - `Success-Response:`
```json
{
"totalTopicCount": 150,
"totalPageCount": 3,
"topics": [
{
"id": 7341076,
"title": "aç insanlar varken teleskopa 10 milyar $ harcamak",
"topicSlug": "/ac-insanlar-varken-teleskopa-10-milyar-harcamak--7341076",
"topicUrl": "https://eksisozluk.com//ac-insanlar-varken-teleskopa-10-milyar-harcamak--7341076",
"totalEntryCount": 38
},
{
"id": 116822,
"title": "anksiyete",
"topicSlug": "/anksiyete--116822?day=2022-07-14",
"topicUrl": "https://eksisozluk.com//anksiyete--116822?day=2022-07-14",
"totalEntryCount": 5
},
...
]
}
```
### Error response
#### Error response - `Error 4xx`
| Name | Type | Description |
|----------|------------|---------------------------------------|
| TopicNotFound | | <p>Aranan kategori gecerli ama hicbir baslik bulunamadi.</p> |
| TopicIsInvalid | | <p>Gecerli bir kategori degil.</p> |
### Error response example
#### Error response example - `api/topic/list/channel/bilim/17:`
```json
{
"error": "Topic not found"
}
```
#### Error response example - `api/topic/list/channel/asd:`
```json
{
"error": "Topic is invalid"
}
```
## <a name='tek-başlık-getir.'></a> tek başlık getir.
[Back to top](#top)
<p>Spesifik başlığı entry'leri ile birlikte getiren endpoint. slug yerine basliğin kendisini birebir yazarsaniz da calisir:</p> <p>örneğin: <code>http://localhost:3000/api/topic/veda ederken 2020'ye bir not bırak</code></p> <p>Full slug ise bu sekil gorunur (baslik--id): <code>pena--31782</code></p> <p>Eger baslik slugi full halinde degilse ve <code>config.topic.allowRedirect</code> true degerine sahipse tam haline yonlendirir.</p> <p>Ornek: <code>http://localhost:3000/api/topic/insanlık tarihinin en kötü iki senesi 536 ve 537</code></p> <p>Son hali: <code>http://localhost:3000/api/topic/insanlik-tarihinin-en-kotu-iki-senesi-536-ve-537--7341301/1</code></p>
```
GET /api/topic/:slug/:page?
```
### Parameters - `Parameter`
| Name | Type | Description |
|----------|------------|---------------------------------------|
| slug | `String` | <p>getirilecek baslik</p> |
| page | `Number` | **optional** <p>getirilecek sayfa</p>_Default value: 1_<br> |
### Examples
Example curl:
```curl
curl -i http://localhost:3000/api/topic/pena
```
Example curl sayfa:
```curl
curl -i http://localhost:3000/api/topic/pena/2
```
Example python:
```python
import requests as r
req = r.get("http://localhost:3000/api/topic/pena")
```
Example axios(js):
```javascript
req = axios.get("http://localhost:3000/api/topic/pena").then(...)
```
### Success response
#### Success response - `200`
| Name | Type | Description |
|----------|------------|---------------------------------------|
| topicID | `Number` | <p>basligin idsi.</p> |
| disambiguations | `Object[]` | <p>farkli anlamlardaki basliklar.</p> |
| disambiguations.slug | `String` | <p>farkli basligin slug hali.</p> |
| disambiguations.title | `String` | <p>farkli basligin ismi.</p> |
| title | `String` | <p>başlıgin ismi.</p> |
| topicSlug | `String` | <p>basligin slug hali</p> |
| numberOfPages | `Number` | <p>basligin sahip oldugu sayfa sayisi</p> |
| currentPage | `Number` | <p>baslikta o anda incelenen sayfa. (.pager degeri)</p> |
| tags | `String[]` | <p>basligin tagleri.</p> |
| entries | `Object[]` | <p>basliktaki entryler.</p> |
| entries.id | `Number` | <p>entry id'si.</p> |
| entries.title | `String` | <p>entrynin ait oldugu baslik</p> |
| entries.body | `String` | <p>entryin icerigi</p> |
| entries.favCount | `Number` | <p>entryin favori sayisi</p> |
| entries.isPinned | `Boolean` | <p>entryin pinli olup olmadigi.</p> |
| entries.isPinnedOnProfile | `Boolean` | <p>entryin profilinde pinli olup olmadigi.</p> |
| entries.inEksiSeyler | `Boolean` | <p>entryin eksiseyler'de olup olmadigi.</p> |
| entries.commentCount | `Number` | <p>entryin yorum sayisi. (sorularinizi yanitliyorum'da vs. bulunan)</p> |
| entries.aboutAuthor | `Object` | <p>entryin yazar bilgileri.</p> |
| entries.aboutAuthor.author | `String` | <p>yazarin nicki.</p> |
| entries.aboutAuthor.authorProfilePicture | `String` | <p>yazarin profil resmi.</p> |
| entries.aboutDateTime | `Object` | <p>entryin tarih bilgileri.</p> |
| entries.aboutDateTime.createdAtDate | `String` | <p>entryin olusturulma tarihi.</p> |
| entries.aboutDateTime.createdAtTime | `String` | <p>entryin olusturulma saati.</p> |
| entries.aboutDateTime.updatedAtDate | `String` | <p>entryin guncellenme tarihi.</p> |
| entries.aboutDateTime.updatedAtTime | `String` | <p>entryin guncellenme saati.</p> |
### Success response example
#### Success response example - `Success-Response:`
```json
{
"topicID": 31872,
"disambiguations": [
{
"slug": "/?q=c%20%28programlama%20dili%29",
"title": "c (programlama dili)"
},
{
"slug": "/?q=c%20%28s%c3%b6zl%c3%bck%20yazar%c4%b1%29",
"title": "c (sözlük yazarı)"
}
],
"title": "c",
"topicSlug": "c--31872",
"numberOfPages": 18,
"currentPage": 1,
"tags": [
"programlama",
"edebiyat"
],
"entries": [
{
"id": 1062,
"title": "c",
"body": "yıllar yılı ortamlarda şöyle yada böyle muhabbetini eden bir takım insanlara dönüp garip garip bakmamızı sağlayan,<br>sonrada \"evime gideyim biraz oyun bezeyim, bunlara benzemeyeyim dedirten.\" iştah açıcı, sivilce yapıcı,anti-sosyalite muamması.",
"favCount": 4,
"isPinned": false,
"isPinnedOnProfile": false,
"inEksiSeyler": false,
"commentCount": 0,
"aboutAuthor": {
"author": "otisabi",
"authorProfilePicture": "https://ekstat.com/img/default-profile-picture-light.svg"
},
"aboutDateTime": {
"createdAtDate": "05.03.1999",
"createdAtTime": null,
"updatedAtDate": null,
"updatedAtTime": null
}
},
{
"id": 172152,
"title": "c",
"body": "alfabenin 3. harfi.",
"favCount": 3,
"isPinned": false,
"isPinnedOnProfile": false,
"inEksiSeyler": false,
"commentCount": 0,
"aboutAuthor": {
"author": "body",
"authorProfilePicture": "https://ekstat.com/img/default-profile-picture-light.svg"
},
"aboutDateTime": {
"createdAtDate": "26.05.2000",
"createdAtTime": "01:06",
"updatedAtDate": null,
"updatedAtTime": null
}
},
...
]
}
```
### Error response
#### Error response - `Error 4xx`
| Name | Type | Description |
|----------|------------|---------------------------------------|
| RequestFailedWithStatusCode404 | | <p>Baslik bulunamadi.</p> |
### Error response example
#### Error response example - `api/topic/cdsaas:`
```json
{
"error": "Request failed with status code 404"
}
```
# <a name='debe'></a> debe
## <a name='debe-getir.'></a> debe getir.
[Back to top](#top)
<p>debeleri getiren endpoint. debe'deki tüm entry'lerin bilgileri döner.</p>
```
GET /api/index/debe
```
### Examples
Example curl:
```curl
curl -i http://localhost:3000/api/index/debe
```
Example python:
```python
import requests as r
req = r.get("http://localhost:3000/api/index/debe")
```
Example axios(js):
```javascript
req = axios.get("http://localhost:3000/api/index/debe").then(...)
```
### Success response
#### Success response - `200`
| Name | Type | Description |
|----------|------------|---------------------------------------|
| info | `Object` | <p>debe bilgileri</p> |
| info.date | `String` | <p>debe tarihi.</p> |
| info.entryCount | `Number` | <p>debe icindeki entry sayisi.</p> |
| entries | `Object[]` | <p>debe icindeki entryler.</p> |
| entries.id | `Number` | <p>entry id'si.</p> |
| entries.slug | `String` | <p>entryin slug'i.</p> |
| entries.title | `String` | <p>entryin basligi.</p> |
### Success response example
#### Success response example - `Success-Response:`
```json
{
"info": {
"date": "2022-07-15",
"entryCount": 45
},
"entries": [
{
"id": 139983585,
"slug": "/entry/139983585",
"title": "fazıl say"
},
{
"id": 139971232,
"slug": "/entry/139971232",
"title": "14 temmuz 2022 datça kundakçısının açıklamaları"
},
...
]
}
```
# <a name='entry'></a> entry
## <a name='tek-entry-getir.'></a> tek entry getir.
[Back to top](#top)
<p>entry no'su ile entry getiren endpoint.</p>
```
GET /api/entry/:id
```
### Parameters - `Parameter`
| Name | Type | Description |
|----------|------------|---------------------------------------|
| id | `Number` | <p>entry no'su.</p> |
### Examples
Example curl:
```curl
curl -i http://localhost:3000/api/entry/139983585
```
Example python:
```python
import requests as r
req = r.get("http://localhost:3000/api/entry/139983585")
```
Example axios(js):
```javascript
req = axios.get("http://localhost:3000/api/entry/139983585").then(...)
```
### Success response
#### Success response - `200`
| Name | Type | Description |
|----------|------------|---------------------------------------|
| id | `Number` | <p>entry id'si.</p> |
| title | `String` | <p>entrynin ait oldugu baslik</p> |
| body | `String` | <p>entryin icerigi</p> |
| favCount | `Number` | <p>entryin favori sayisi</p> |
| isPinned | `Boolean` | <p>entryin pinli olup olmadigi.</p> |
| isPinnedOnProfile | `Boolean` | <p>entryin profilinde pinli olup olmadigi.</p> |
| inEksiSeyler | `Boolean` | <p>entryin eksiseyler'de olup olmadigi.</p> |
| commentCount | `Number` | <p>entryin yorum sayisi. (sorularinizi yanitliyorum'da vs. bulunan)</p> |
| aboutAuthor | `Object` | <p>entryin yazar bilgileri.</p> |
| aboutAuthor.author | `String` | <p>yazarin nicki.</p> |
| aboutAuthor.authorProfilePicture | `String` | <p>yazarin profil resmi.</p> |
| aboutDateTime | `Object` | <p>entryin tarih bilgileri.</p> |
| aboutDateTime.createdAtDate | `String` | <p>entryin olusturulma tarihi.</p> |
| aboutDateTime.createdAtTime | `String` | <p>entryin olusturulma saati.</p> |
| aboutDateTime.updatedAtDate | `String` | <p>entryin guncellenme tarihi.</p> |
| aboutDateTime.updatedAtTime | `String` | <p>entryin guncellenme saati.</p> |
### Success response example
#### Success response example - `Success-Response:`
```json
{
"id": 139730148,
"title": "simcity",
"body": "yine internetin karanlık dehlizlerinde gezerken ...",
"favCount": 11,
"isPinned": false,
"isPinnedOnProfile": false,
"inEksiSeyler": true,
"commentCount": 0,
"aboutAuthor": {
"author": "jottar",
"authorProfilePicture": "https://img.ekstat.com/profiles/jottar-637919601690625181.jpg"
},
"aboutDateTime": {
"createdAtDate": "08.07.2022",
"createdAtTime": "11:37",
"updatedAtDate": "16:45",
"updatedAtTime": null
}
}
```
### Error response
#### Error response - `Error 4xx`
| Name | Type | Description |
|----------|------------|---------------------------------------|
| RequestFailedWithStatusCode404 | | <p>Entry bulunamadi.</p> |
| EntryNotFound | | <p>Entry getirirken eksi sozluk patlarsa (büyük başarısızlıklar sözkonusu)</p> |
### Error response example
#### Error response example - `api/entry/4216654:`
```json
{
"error": "Request failed with status code 404"
}
```
#### Error response example - `api/entry/42424242424:`
```json
{
"error": "Entry not found"
}
```
# <a name='etc'></a> etc
## <a name='tum-kanallari-getir.'></a> tum kanallari getir.
[Back to top](#top)
<p>Tum kanallari getiren endpoint.</p> <p><code>¯\_(ツ)_/¯</code></p>
```
GET /api/index/channels
```
### Examples
Example curl:
```curl
curl -i http://localhost:3000/api/index/channels
```
Example python:
```python
import requests as r
req = r.get("http://localhost:3000/api/index/channels")
```
Example axios(js):
```javascript
req = axios.get("http://localhost:3000/api/index/channels").then(...)
```
### Success response
#### Success response - `200`
| Name | Type | Description |
|----------|------------|---------------------------------------|
| channels | `Object[]` | <p>kanallarin arrayi.</p> |
| channels.name | `String` | <p>kanalin ismi.</p> |
| channels.slug | `String` | <p>kanalin url slug hali.</p> |
| channels.description | `String` | <p>kanalin açiklamasi.</p> |
### Success response example
#### Success response example - `Success-Response:`
```json
{
"channels": [
{
"name": "#haber",
"slug": "/basliklar/kanal/haber",
"description": "yurtta ve dünyada olan biten"
},
{
"name": "#sinema",
"slug": "/basliklar/kanal/sinema",
"description": "filmler, yönetmenler, teknikler, yarıda salonu terk etmeler"
},
...
]
}
```
# <a name='kullanici'></a> kullanici
## <a name='entry-sayfasini-getir.'></a> entry sayfasini getir.
[Back to top](#top)
<p>kullanicinin girdigi entry sayfalarini getiren endpoint.</p> <p>eger sayfa parametresi verilmezse ilk sayfayi dondurur.</p> <p>eger ilk sayfa ise ve kullanicinin sabitledigi bir entry varsa <code>entries</code> arrayindan once <code>pinnedEntry</code> objesi dondurur. formatin degistigi tek durum budur.</p> <p>diger sayfalarda ise veya sabitlenen entry yoksa sadece <code>entries</code> arrayi dondurur. null degeriyle bile olsa <code>pinnedEntry</code> diye bir bolum direkt yer almaz.</p> <pre><code>'entries': 'son-entryleri',
'favorites': 'favori-entryleri',
'most-favorited': 'en-cok-favorilenen-entryleri',
'last-voted': 'son-oylananlari',
'weekly': 'bu-hafta-dikkat-cekenleri',
'handicraft': 'el-emegi-goz-nuru',
'most-liked': 'en-begenilenleri',
</code></pre>
```
GET /api/user/:nick/:choice/:page?
```
### Parameters - `Parameter`
| Name | Type | Description |
|----------|------------|---------------------------------------|
| nick | `String` | <p>kullanici nicki</p> |
| choice | `String` | <p>getirelecek entry sayfasi kategorisi.</p>_Allowed values: "entries","favorites","most-favorited","last-voted","weekly","handicraft","most-liked"_ |
| page | `Number` | **optional** <p>getirilecek sayfa</p>_Default value: 1_<br> |
### Examples
Example curl:
```curl
curl -i http://localhost:3000/api/user/ssg/entries
```
Example curl sayfa:
```curl
curl -i http://localhost:3000/api/user/ssg/entries/2
```
Example python:
```python
import requests as r
req = r.get("http://localhost:3000/api/user/ssg/entries")
```
Example axios(js):
```javascript
req = axios.get("http://localhost:3000/api/user/ssg/entries").then(...)
```
### Success response
#### Success response - `200`
| Name | Type | Description |
|----------|------------|---------------------------------------|
| pinnedEntry | `Object` | <p><code>NOT:</code> sadece ilk sayfada return edilen standart entry objesi. Objenin yapisi alttaki entry objesi ile ayni.</p> |
| entries | `Object[]` | <p>entryleri barindiran array</p> |
| entries.id | `Number` | <p>entry id'si.</p> |
| entries.title | `String` | <p>entrynin ait oldugu baslik</p> |
| entries.body | `String` | <p>entryin icerigi</p> |
| entries.favCount | `Number` | <p>entryin favori sayisi</p> |
| entries.isPinned | `Boolean` | <p>entryin pinli olup olmadigi.</p> |
| entries.isPinnedOnProfile | `Boolean` | <p>entryin profilinde pinli olup olmadigi.</p> |
| entries.inEksiSeyler | `Boolean` | <p>entryin eksiseyler'de olup olmadigi.</p> |
| entries.commentCount | `Number` | <p>entryin yorum sayisi. (sorularinizi yanitliyorum'da vs. bulunan)</p> |
| entries.aboutAuthor | `Object` | <p>entryin yazar bilgileri.</p> |
| entries.aboutAuthor.author | `String` | <p>yazarin nicki.</p> |
| entries.aboutAuthor.authorProfilePicture | `String` | <p>yazarin profil resmi.</p> |
| entries.aboutDateTime | `Object` | <p>entryin tarih bilgileri.</p> |
| entries.aboutDateTime.createdAtDate | `String` | <p>entryin olusturulma tarihi.</p> |
| entries.aboutDateTime.createdAtTime | `String` | <p>entryin olusturulma saati.</p> |
| entries.aboutDateTime.updatedAtDate | `String` | <p>entryin guncellenme tarihi.</p> |
| entries.aboutDateTime.updatedAtTime | `String` | <p>entryin guncellenme saati.</p> |
### Success response example
#### Success response example - `Success-Response:`
```json
{
"entries": [
{
"id": 139962328,
"title": "yazarların favori ressam ve eseri",
"body": "<a class=\"b\" href=\"/?q=albert+bierstadt\">albert bierstadt</a>'ın \"<a rel=\"nofollow noopener\" class=\"url\" target=\"_blank\" href=\"https://twitter.com/esesci/status/927741151469117441?s=20&t=GHkkCtUJz8GNqzwbjNfMLA\" title=\"https://twitter.com/esesci/status/927741151469117441?s=20&t=GHkkCtUJz8GNqzwbjNfMLA\">puget sound on the pacific coast</a>\" eseri çok sevdiklerimden biridir.",
"favCount": 12,
"isPinned": false,
"isPinnedOnProfile": false,
"inEksiSeyler": false,
"commentCount": 0,
"aboutAuthor": {
"author": "ssg",
"authorProfilePicture": "https://img.ekstat.com/profiles/ssg-637802096150637091.jpg"
},
"aboutDateTime": {
"createdAtDate": "14.07.2022",
"createdAtTime": "10:38",
"updatedAtDate": null,
"updatedAtTime": null
}
},
...
]
}
```
### Error response
#### Error response - `Error 4xx`
| Name | Type | Description |
|----------|------------|---------------------------------------|
| PageNotFound | | <p>sayfa bulunamadi.</p> |
### Error response example
#### Error response example - `api/user/ssg/entries/54356:`
```json
{
"error": "Page not found"
}
```
## <a name='kullanici-gorsellerini-getir.'></a> kullanici gorsellerini getir.
[Back to top](#top)
<p>nick ile kullanici gorsellerini getiren endpoint.</p>
```
GET /api/user/:nick/images
```
### Parameters - `Parameter`
| Name | Type | Description |
|----------|------------|---------------------------------------|
| nick | `String` | <p>kullanici nicki</p> |
### Examples
Example curl:
```curl
curl -i http://localhost:3000/api/user/ssg/images
```
Example python:
```python
import requests as r
req = r.get("http://localhost:3000/api/user/ssg/images")
```
Example axios(js):
```javascript
req = axios.get("http://localhost:3000/api/user/ssg/images").then(...)
```
### Success response
#### Success response - `200`
| Name | Type | Description |
|----------|------------|---------------------------------------|
| images | `Object[]` | <p>gorsel arrayi.</p> |
| images.slug | `String` | <p>gorselin slug hali.</p> |
| images.imageURL | `String` | <p>gorselin full linki.</p> |
| images.date | `Object` | <p>gorselin tarihi.</p> |
| images.date.year | `String` | <p>gorselin tarihi yil.</p> |
| images.date.month | `String` | <p>gorselin tarihi ay.</p> |
| images.date.day | `String` | <p>gorselin tarihi gun.</p> |
### Success response example
#### Success response example - `Success-Response:`
```json
{
"images": [
{
"slug": "/img/x5zal9ig",
"imageURL": "'https://cdn.eksisozluk.com/2020/4/15/x/x5zal9ig.jpg'",
"date": {
"year": "2020",
"month": "4",
"day": "15"
}
},
{
"slug": "/img/at7lo6r6",
"imageURL": "'https://cdn.eksisozluk.com/2020/7/1/a/at7lo6r6.png'",
"date": {
"year": "2020",
"month": "7",
"day": "1"
}
},
...
]
}
```
## <a name='tek-kullanıcı-getir.'></a> tek kullanıcı getir.
[Back to top](#top)
<p>nick ile kullanıcı bilgisi getiren endpoint.</p> <p>Bu endpoint kullanicinin son entrylerini gostermek icin otomatik olarak page endpoini de cagirir.</p> <p>Devre disi birakmak icin <code>config.user.autoRetrieveLastEntries</code> <code>false</code> yapilabilir. Eger yapilirsa <code>lastEntries</code> kismi dondurulmez.</p>
```
GET /api/user/:nick
```
### Parameters - `Parameter`
| Name | Type | Description |
|----------|------------|---------------------------------------|
| nick | `String` | <p>kullanici nicki</p> |
### Examples
Example curl:
```curl
curl -i http://localhost:3000/api/user/ssg
```
Example python:
```python
import requests as r
req = r.get("http://localhost:3000/api/user/ssg")
```
Example axios(js):
```javascript
req = axios.get("http://localhost:3000/api/user/ssg").then(...)
```
### Success response
#### Success response - `200`
| Name | Type | Description |
|----------|------------|---------------------------------------|
| nick | `String` | <p>kullanicinin nicki.</p> |
| isUserCaylak | `Boolean` | <p>kullanicinin caylak olup olmadigi.</p> |
| isUserLanetli | `Boolean` | <p>kullanicinin lanetli olup olmadigi.</p> |
| isUserLeyla | `Boolean` | <p>kullanicinin ucup ucmadigi.</p> |
| totalEntryCount | `Number` | <p>kullanicinin toplam entry sayisi.</p> |
| totalPageCount | `Number` | <p>kullanicinin toplam entry sayfa sayisi.</p> |
| userFollowingCount | `Number` | <p>kullanicinin takip edilen kullanici sayisi.</p> |
| userFollowerCount | `Number` | <p>kullaniciyi takip eden kullanici sayisi.</p> |
| karmaLevel | `String` | <p>kullanicinin karma seviyesi.</p> |
| pinnedBadges | `Object[]` | <p>kullanicinin sergiledigi rozetler.</p> |
| pinnedBadges.title | `String` | <p>rozetin adi.</p> |
| pinnedBadges.imgSrc | `String` | <p>rozetin resmi.</p> |
| authorProfilePicture | `String` | <p>kullanicinin profil resmi.</p> |
| lastEntries | `Object` | <p>kullanicinin son entryleri.</p> |
| lastEntries.pinnedEntry | `Object` | <p>kullanicinin profiline sabitlenmis entry</p> |
| lastEntries.pinnedEntry.id | `Number` | <p>entry id'si.</p> |
| lastEntries.pinnedEntry.title | `String` | <p>entrynin ait oldugu baslik</p> |
| lastEntries.pinnedEntry.body | `String` | <p>entryin icerigi</p> |
| lastEntries.pinnedEntry.favCount | `Number` | <p>entryin favori sayisi</p> |
| lastEntries.pinnedEntry.isPinned | `Boolean` | <p>entryin pinli olup olmadigi.</p> |
| lastEntries.pinnedEntry.isPinnedOnProfile | `Boolean` | <p>entryin profilinde pinli olup olmadigi.</p> |
| lastEntries.pinnedEntry.inEksiSeyler | `Boolean` | <p>entryin eksiseyler'de olup olmadigi.</p> |
| lastEntries.pinnedEntry.commentCount | `Number` | <p>entryin yorum sayisi. (sorularinizi yanitliyorum'da vs. bulunan)</p> |
| lastEntries.pinnedEntry.aboutAuthor | `Object` | <p>entryin yazar bilgileri.</p> |
| lastEntries.pinnedEntry.aboutAuthor.author | `String` | <p>yazarin nicki.</p> |
| lastEntries.pinnedEntry.aboutAuthor.authorProfilePicture | `String` | <p>yazarin profil resmi.</p> |
| lastEntries.pinnedEntry.aboutDateTime | `Object` | <p>entryin tarih bilgileri.</p> |
| lastEntries.pinnedEntry.aboutDateTime.createdAtDate | `String` | <p>entryin olusturulma tarihi.</p> |
| lastEntries.pinnedEntry.aboutDateTime.createdAtTime | `String` | <p>entryin olusturulma saati.</p> |
| lastEntries.pinnedEntry.aboutDateTime.updatedAtDate | `String` | <p>entryin guncellenme tarihi.</p> |
| lastEntries.pinnedEntry.aboutDateTime.updatedAtTime | `String` | <p>entryin guncellenme saati.</p> |
| lastEntries.entries | `Object[]` | <p>kullanicinin entryleri.</p> |
| lastEntries.entries.id | `Number` | <p>entry id'si.</p> |
| lastEntries.entries.title | `String` | <p>entrynin ait oldugu baslik</p> |
| lastEntries.entries.body | `String` | <p>entryin icerigi</p> |
| lastEntries.entries.favCount | `Number` | <p>entryin favori sayisi</p> |
| lastEntries.entries.isPinned | `Boolean` | <p>entryin pinli olup olmadigi.</p> |
| lastEntries.entries.isPinnedOnProfile | `Boolean` | <p>entryin profilinde pinli olup olmadigi.</p> |
| lastEntries.entries.inEksiSeyler | `Boolean` | <p>entryin eksiseyler'de olup olmadigi.</p> |
| lastEntries.entries.commentCount | `Number` | <p>entryin yorum sayisi. (sorularinizi yanitliyorum'da vs. bulunan)</p> |
| lastEntries.entries.aboutAuthor | `Object` | <p>entryin yazar bilgileri.</p> |
| lastEntries.entries.aboutAuthor.author | `String` | <p>yazarin nicki.</p> |
| lastEntries.entries.aboutAuthor.authorProfilePicture | `String` | <p>yazarin profil resmi.</p> |
| lastEntries.entries.aboutDateTime | `Object` | <p>entryin tarih bilgileri.</p> |
| lastEntries.entries.aboutDateTime.createdAtDate | `String` | <p>entryin olusturulma tarihi.</p> |
| lastEntries.entries.aboutDateTime.createdAtTime | `String` | <p>entryin olusturulma saati.</p> |
| lastEntries.entries.aboutDateTime.updatedAtDate | `String` | <p>entryin guncellenme tarihi.</p> |
| lastEntries.entries.aboutDateTime.updatedAtTime | `String` | <p>entryin guncellenme saati.</p> |
### Success response example
#### Success response example - `Success-Response:`
```json
{
"nick": "ssg",
"isUserCaylak": false,
"isUserLanetli": false,
"isUserLeyla": false,
"totalEntryCount": 51118,
"totalPageCount": 5112,
"userFollowingCount": 452,
"userFollowerCount": 15122,
"karmaLevel": "mangal yürekli rişar (500)",
"pinnedBadges": [
{
"title": "gece kuşu: çoğunlukla gece entry girenler",
"imgSrc": "https://cdn.eksisozluk.com/badges/gece-kusu.png"
},
...
],
"authorProfilePicture": "https://img.ekstat.com/profiles/ssg-637802096150637091.jpg",
"lastEntries": {
"pinnedEntry": {
"id": 112047179,
"title": "street coder",
"body": "başlangıç ve orta seviye programcılar için hem var olan yerleşik kural ve prensipleri sorgulayan hem de bazılarını neden kullanmamız gerektiği konusunda sorgular ve tavsiyeler içeren <a rel=\"nofollow noopener\" class=\"url\" target=\"_blank\" href=\"https://www.manning.com/books/street-coder?utm_source=sedatk&utm_medium=affiliate&utm_campaign=book_kapanoglu_street_10_6_20&a_aid=sedatk&a_bid=72b5d1be\" title=\"https://www.manning.com/books/street-coder?utm_source=sedatk&utm_medium=affiliate&utm_campaign=book_kapanoglu_street_10_6_20&a_aid=sedatk&a_bid=72b5d1be\">kitabım</a>. kitabın amacı farklı yollardan kendine temel bir programlama bilgisi edinmiş geliştiricilere \"sokaklarda\" başlarına neler gelebileceği ve önemsemedikleri bazı konuların kendilerine bu sokak macerasında nasıl yardımcı olacağı konusunda bir perspektif açmak. <a class=\"b\" href=\"/?q=manning+publications\">manning publications</a>'ın <a class=\"b\" href=\"/?q=meap\">meap</a> erken erişim programıyla çıktı. gelen geri bildirimler doğrultusunda hem şekillenecek hem de kitabın gelişimini canlı takip etme imkanı olacak.<br><br><a rel=\"nofollow noopener\" class=\"url\" target=\"_blank\" href=\"https://streetcoder.org/\">https://streetcoder.org/</a>",
"favCount": 221,
"isPinned": false,
"isPinnedOnProfile": true,
"inEksiSeyler": false,
"commentCount": 0,
"aboutAuthor": {
"author": "ssg",
"authorProfilePicture": "https://img.ekstat.com/profiles/ssg-637802096150637091.jpg"
},
"aboutDateTime": {
"createdAtDate": "24.08.2020",
"createdAtTime": "22:49",
"updatedAtDate": "01.09.2021",
"updatedAtTime": "22:35"
}
},
"entries": [
{
"id": 140215313,
"title": "yazarların cips tercihleri",
"body": "(bkz: <a class=\"b\" href=\"/entry/34124398\">kılıçoğlu sineması/#34124398</a>)",
...
}
},
...
]
}
}
```
### Error response
#### Error response - `Error 4xx`
| Name | Type | Description |
|----------|------------|---------------------------------------|
| RequestFailedWithStatusCode404 | | <p>kullanici bulunamadi.</p> |
### Error response example
#### Error response example - `api/user/4213412fadsfsadsadsad421:`
```json
{
"error": "Request failed with status code 404"
}
```
# TLDR
<h1>TLDR</h1>
<table>
<thead>
<tr>
<th>controller</th>
<th>method</th>
<th style="text-align:center">endpoint</th>
<th>örnek url (tıkla)</th>
<th>sayfali örnek url (tıkla)</th>
<th>açıklama</th>
</tr>
</thead>
<tbody>
<tr>
<td>topicList</td>
<td>get</td>
<td style="text-align:center"><code>api/topic/list/channel/:choice/:page?</code></td>
<td><a href="/api/topic/list/channel/haber">/api/topic/list/channel/haber</a></td>
<td><a href="/api/topic/list/channel/m%C3%BCzik/2">/api/topic/list/channel/müzik/2</a></td>
<td>kanal başlıklarını getirir</td>
</tr>
<tr>
<td>topicList</td>
<td>get</td>
<td style="text-align:center"><code>api/topic/list/:choice/:page?</code></td>
<td><a href="/api/topic/list/gundem">/api/topic/list/gundem</a></td>
<td><a href="/api/topic/basiboslar/3">/api/topic/list/basiboslar/3</a></td>
<td>başlıkları getirir</td>
</tr>
<tr>
<td>topic</td>
<td>get</td>
<td style="text-align:center"><code>api/topic/:slug/:page?</code></td>
<td><a href="/api/topic/pena">/api/topic/pena</a></td>
<td><a href="/api/topic/gap%20year/2">/api/topic/gap year/2</a></td>
<td>bir başlığı getirir</td>
</tr>
<tr>
<td>entry</td>
<td>get</td>
<td style="text-align:center"><code>api/entry/:id</code></td>
<td><a href="/api/entry/1">/api/entry/1</a></td>
<td> </td>
<td>bir entry'i getirir</td>
</tr>
<tr>
<td>page</td>
<td>get</td>
<td style="text-align:center"><code>api/user/:nick/:choice/:page?</code></td>
<td><a href="/api/user/ssg/entries">/api/user/ssg/entries</a></td>
<td><a href="/api/user/ssg/most-liked/2">/api/user/ssg/most-liked/2</a></td>
<td>bir suserin entry sayfalarini getirir</td>
</tr>
<tr>
<td>debe</td>
<td>get</td>
<td style="text-align:center"><code>api/index/debe</code></td>
<td><a href="/api/index/debe">/api/index/debe</a></td>
<td> </td>
<td>debe'yi getirir</td>
</tr>
<tr>
<td>user</td>
<td>get</td>
<td style="text-align:center"><code>api/user/:nick</code></td>
<td><a href="/api/user/ssg">/api/user/ssg</a></td>
<td> </td>
<td>bir suser'ı getirir</td>
</tr>
<tr>
<td>search</td>
<td>get</td>
<td style="text-align:center"><code>api/index/search/:query/:page?</code></td>
<td><a href="/api/index/search/pena">/api/index/search/pena</a></td>
<td><a href="/api/index/search/boston%20celtics/4">/api/index/search/boston celtics/4</a></td>
<td>arama sonucu</td>
</tr>
<tr>
<td>autoComplete</td>
<td>get</td>
<td style="text-align:center"><code>api/index/autocomplete/:query</code></td>
<td><a href="/api/index/autocomplete/pena">/api/index/autocomplete/pena</a></td>
<td> </td>
<td>otomatik tamamlama</td>
</tr>
<tr>
<td>allChannels</td>
<td>get</td>
<td style="text-align:center"><code>api/index/channels</code></td>
<td><a href="/api/index/channels">/api/index/channels</a></td>
<td> </td>
<td>kanal kategorileri</td>
</tr>
<tr>
<td>images</td>
<td>get</td>
<td style="text-align:center"><code>api/user/:nick/images</code></td>
<td><a href="/api/user/ssg/images">/api/user/ssg/images</a></td>
<td> </td>
<td>bir suserin gorsellerini getirir</td>
</tr>
</tbody>
</table>
<p><a href="https://github.com/otuva/eksisozluk-api"><img src="https://img.shields.io/badge/github-%23121011.svg?style=for-the-badge&logo=github&logoColor=white" alt="GitHub"></a></p>
<hr>