migros-mcp 0.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- migros_mcp-0.1.0/.github/workflows/publish.yml +20 -0
- migros_mcp-0.1.0/.github/workflows/registry.yml +61 -0
- migros_mcp-0.1.0/LICENSE +21 -0
- migros_mcp-0.1.0/PKG-INFO +76 -0
- migros_mcp-0.1.0/README-fa.md +39 -0
- migros_mcp-0.1.0/README-tr.md +41 -0
- migros_mcp-0.1.0/README.md +64 -0
- migros_mcp-0.1.0/pyproject.toml +22 -0
- migros_mcp-0.1.0/server.json +1 -0
- migros_mcp-0.1.0/src/migros_mcp/__init__.py +2 -0
- migros_mcp-0.1.0/src/migros_mcp/http.py +88 -0
- migros_mcp-0.1.0/src/migros_mcp/products.py +142 -0
- migros_mcp-0.1.0/src/migros_mcp/server.py +110 -0
- migros_mcp-0.1.0/tests/__init__.py +0 -0
- migros_mcp-0.1.0/tests/fixtures/categories.json +1 -0
- migros_mcp-0.1.0/tests/fixtures/product_detail.json +1 -0
- migros_mcp-0.1.0/tests/fixtures/search_sut.json +1 -0
- migros_mcp-0.1.0/tests/test_live.py +55 -0
- migros_mcp-0.1.0/tests/test_products.py +97 -0
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
name: Publish to PyPI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
tags: ["v*"]
|
|
6
|
+
|
|
7
|
+
jobs:
|
|
8
|
+
publish:
|
|
9
|
+
runs-on: ubuntu-latest
|
|
10
|
+
permissions:
|
|
11
|
+
id-token: write # required for PyPI trusted publishing (OIDC)
|
|
12
|
+
contents: read
|
|
13
|
+
steps:
|
|
14
|
+
- uses: actions/checkout@v4
|
|
15
|
+
- uses: actions/setup-python@v5
|
|
16
|
+
with:
|
|
17
|
+
python-version: "3.12"
|
|
18
|
+
- run: pip install build
|
|
19
|
+
- run: python -m build
|
|
20
|
+
- uses: pypa/gh-action-pypi-publish@release/v1
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
name: Publish to MCP Registry
|
|
2
|
+
|
|
3
|
+
# Official MCP Registry (registry.modelcontextprotocol.io) via GitHub OIDC.
|
|
4
|
+
# No secret, no interactive login: the runner's OIDC token proves ownership
|
|
5
|
+
# of the io.github.mohammad-abbasi-sh/* namespace.
|
|
6
|
+
# Refs: https://github.com/modelcontextprotocol/registry
|
|
7
|
+
|
|
8
|
+
on:
|
|
9
|
+
push:
|
|
10
|
+
tags: ["v*"]
|
|
11
|
+
workflow_dispatch:
|
|
12
|
+
|
|
13
|
+
jobs:
|
|
14
|
+
publish:
|
|
15
|
+
runs-on: ubuntu-latest
|
|
16
|
+
permissions:
|
|
17
|
+
id-token: write # required for OIDC -> MCP Registry
|
|
18
|
+
contents: read
|
|
19
|
+
steps:
|
|
20
|
+
- uses: actions/checkout@v4
|
|
21
|
+
|
|
22
|
+
- name: Sync server.json version to tag
|
|
23
|
+
# Only sync when running on a version tag (v*). On workflow_dispatch
|
|
24
|
+
# (ref = refs/heads/main) keep the version committed in server.json.
|
|
25
|
+
run: |
|
|
26
|
+
VER=""
|
|
27
|
+
if [[ "$GITHUB_REF" == refs/tags/* ]]; then
|
|
28
|
+
TAG="${GITHUB_REF#refs/tags/}"
|
|
29
|
+
VER="${TAG#v}"
|
|
30
|
+
fi
|
|
31
|
+
if [ -n "$VER" ]; then
|
|
32
|
+
python3 - "$VER" << 'EOF'
|
|
33
|
+
import json, sys
|
|
34
|
+
ver = sys.argv[1]
|
|
35
|
+
d = json.load(open('server.json'))
|
|
36
|
+
d['version'] = ver
|
|
37
|
+
for pkg in d.get('packages', []):
|
|
38
|
+
pkg['version'] = ver
|
|
39
|
+
json.dump(d, open('server.json', 'w'), indent=2, ensure_ascii=False)
|
|
40
|
+
print('server.json version ->', ver)
|
|
41
|
+
EOF
|
|
42
|
+
else
|
|
43
|
+
echo "No version tag ($GITHUB_REF); keeping server.json version as-is"
|
|
44
|
+
fi
|
|
45
|
+
|
|
46
|
+
- name: Install mcp-publisher
|
|
47
|
+
run: |
|
|
48
|
+
curl -sL "https://github.com/modelcontextprotocol/registry/releases/download/v1.8.7/mcp-publisher_linux_amd64.tar.gz" -o /tmp/mcp-publisher.tar.gz
|
|
49
|
+
tar -xzf /tmp/mcp-publisher.tar.gz -C /tmp
|
|
50
|
+
sudo mv /tmp/mcp-publisher /usr/local/bin/mcp-publisher
|
|
51
|
+
mcp-publisher --version
|
|
52
|
+
|
|
53
|
+
- name: Validate server.json
|
|
54
|
+
run: mcp-publisher validate server.json
|
|
55
|
+
|
|
56
|
+
- name: Publish to MCP Registry (OIDC)
|
|
57
|
+
run: |
|
|
58
|
+
mcp-publisher login github-oidc
|
|
59
|
+
mcp-publisher publish server.json
|
|
60
|
+
# A registry outage must never break the release; re-run from Actions if needed.
|
|
61
|
+
continue-on-error: true
|
migros_mcp-0.1.0/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Mohammad Abbasi
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
|
+
Name: migros-mcp
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Unofficial read-only MCP server for Migros Sanal Market (migros.com.tr) — product search, prices, promos, categories
|
|
5
|
+
Author: Mohammad Abbasi
|
|
6
|
+
License: MIT
|
|
7
|
+
License-File: LICENSE
|
|
8
|
+
Requires-Python: >=3.10
|
|
9
|
+
Requires-Dist: curl-cffi>=0.7
|
|
10
|
+
Requires-Dist: mcp<2
|
|
11
|
+
Description-Content-Type: text/markdown
|
|
12
|
+
|
|
13
|
+
# migros-mcp 🇹🇷
|
|
14
|
+
|
|
15
|
+
mcp-name: io.github.mohammad-abbasi-sh/migros-mcp
|
|
16
|
+
|
|
17
|
+
Unofficial **read-only** MCP server for **Migros Sanal Market** (migros.com.tr), Türkiye's largest supermarket chain — live product search, prices, Money-discount promotions, categories and price stats.
|
|
18
|
+
|
|
19
|
+
> Part of the "Turkey MCP factory". Not affiliated with Migros. Note: this is the **Turkish** Migros (migros.com.tr) — not the Swiss Migros, which has its own unrelated `migros-mcp` on npm. Price comparison across chains is covered by `yibudak/marketfiyati_mcp` (marketfiyati.org.tr); this server covers Migros's own catalogue, promos and categories.
|
|
20
|
+
|
|
21
|
+
## For AI agents
|
|
22
|
+
|
|
23
|
+
Add to your MCP client config (stdio):
|
|
24
|
+
|
|
25
|
+
```json
|
|
26
|
+
{
|
|
27
|
+
"mcpServers": {
|
|
28
|
+
"migros": {
|
|
29
|
+
"command": "uvx",
|
|
30
|
+
"args": ["migros-mcp"]
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
Or run locally: `python -m migros_mcp.server` (needs `mcp<2`, `curl-cffi`).
|
|
37
|
+
|
|
38
|
+
## Tools
|
|
39
|
+
|
|
40
|
+
| Tool | Description |
|
|
41
|
+
|------|-------------|
|
|
42
|
+
| `migros_search_products` | Search products — `query` (Turkish, e.g. "süt"), `page`, `sort`: relevance / best_seller / discount / discount_amount / price_asc / price_desc |
|
|
43
|
+
| `migros_get_product` | Full detail for one product — `product_id` (numeric, from search) |
|
|
44
|
+
| `migros_list_categories` | Top-level store categories (11) |
|
|
45
|
+
| `migros_list_promotions` | Money-discounted products for a keyword, best discount first |
|
|
46
|
+
| `migros_price_stats` | Price stats (min/median/max/mean, cheapest & priciest) for a keyword |
|
|
47
|
+
|
|
48
|
+
Example output (`migros_search_products` / "süt", price_asc):
|
|
49
|
+
|
|
50
|
+
```json
|
|
51
|
+
{"query": "süt", "hit_count": 371, "page_count": 13, "count": 36,
|
|
52
|
+
"products": [{"id": 20000011010208, "name": "Sütaş Latte 1 L",
|
|
53
|
+
"brand": "Sütaş", "category": "Uzun Ömürlü Süt",
|
|
54
|
+
"price_tl": 189.0, "money_discount_pct": 0, ...}]}
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
Notes:
|
|
58
|
+
- Prices are Turkish Lira (TRY); the API reports kuruş (1/100 TRY).
|
|
59
|
+
- `money_discount_pct` is the **Money-loyalty discount** percentage, not a strikethrough — the shelf price is what a guest pays.
|
|
60
|
+
- The first search result is often a sponsored/pinned product; the rest follow the requested sort.
|
|
61
|
+
- Data: Migros's public `product-bff` JSON API (`migros.com.tr/rest/product-bff`) — no key, no login, read-only.
|
|
62
|
+
- Store lookup and delivery slots need an authenticated session, so this server does not offer them.
|
|
63
|
+
|
|
64
|
+
## Development
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
python3 -m venv .venv && .venv/bin/pip install "mcp<2" curl-cffi pytest
|
|
68
|
+
.venv/bin/python -m pytest tests/ -q
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
- `tests/test_products.py` — offline, parses real captured API fixtures
|
|
72
|
+
- `tests/test_live.py` — 4 cautious live requests against migros.com.tr
|
|
73
|
+
|
|
74
|
+
## License
|
|
75
|
+
|
|
76
|
+
MIT
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# migros-mcp 🇹🇷
|
|
2
|
+
|
|
3
|
+
سرور MCP غیررسمی و **فقطخواندنی** برای **میگروس** ترکیه (migros.com.tr)، بزرگترین زنجیرهی سوپرمارکتی ترکیه — جستوجوی زندهی محصولات، قیمتها، تخفیفهای Money، دستهبندیها و آمار قیمت.
|
|
4
|
+
|
|
5
|
+
> بخشی از «کارخانهی MCP ترکیه». هیچ وابستگی به میگروس ندارد. این میگروس **ترکیه** است — نه میگروس سوئیس که بستهی جداگانهی `migros-mcp` را در npm دارد.
|
|
6
|
+
|
|
7
|
+
## برای ایجنتهای هوش مصنوعی
|
|
8
|
+
|
|
9
|
+
```json
|
|
10
|
+
{
|
|
11
|
+
"mcpServers": {
|
|
12
|
+
"migros": {
|
|
13
|
+
"command": "uvx",
|
|
14
|
+
"args": ["migros-mcp"]
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## ابزارها
|
|
21
|
+
|
|
22
|
+
| ابزار | توضیح |
|
|
23
|
+
|------|-------|
|
|
24
|
+
| `migros_search_products` | جستوجوی محصول — `query` (مثلاً «süt»)، `page`، `sort`: relevance / best_seller / discount / discount_amount / price_asc / price_desc |
|
|
25
|
+
| `migros_get_product` | جزئیات کامل یک محصول — `product_id` (از نتایج جستوجو) |
|
|
26
|
+
| `migros_list_categories` | دستهبندیهای اصلی فروشگاه (۱۱ مورد) |
|
|
27
|
+
| `migros_list_promotions` | محصولات تخفیفدار Money برای یک کلمهی کلیدی، بیشترین تخفیف اول |
|
|
28
|
+
| `migros_price_stats` | آمار قیمت یک کلمهی کلیدی (کمترین/میانه/بیشترین/میانگین، ارزانترین و گرانترین) |
|
|
29
|
+
|
|
30
|
+
نکتهها:
|
|
31
|
+
- قیمتها به لیر ترکیه (TRY) هستند؛ API قیمت را به کوروش (۱/۱۰۰ لیر) برمیگرداند.
|
|
32
|
+
- `money_discount_pct` درصد تخفیف وفاداری Money است، نه تخفیف روی برچسب قیمت — قیمت قفسه همان قیمتی است که مشتری میپردازد.
|
|
33
|
+
- اولین نتیجهی جستوجو معمولاً محصول اسپانسرشده است؛ بقیه طبق مرتبسازی درخواستی میآیند.
|
|
34
|
+
- داده: API عمومی JSON `product-bff` میگروس — بدون کلید، بدون لاگین، فقطخواندنی.
|
|
35
|
+
- یافتن فروشگاه و بازههای تحویل نیازمند ورود است، پس در این سرور نیست.
|
|
36
|
+
|
|
37
|
+
## قوانین
|
|
38
|
+
|
|
39
|
+
غیررسمی و فقطخواندنی — بدون لاگین، بدون کلید، بدون نوشتن. تستها: آفلاین با فیکسچر + تست زنده (۱۵/۱۵ سبز).
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# migros-mcp 🇹🇷
|
|
2
|
+
|
|
3
|
+
**Migros Sanal Market** (migros.com.tr) için gayriresmî, **salt-okunur** MCP sunucusu — canlı ürün arama, fiyatlar, Money indirimleri, kategoriler ve fiyat istatistikleri.
|
|
4
|
+
|
|
5
|
+
> "Türkiye MCP fabrikası" parçasıdır. Migros ile bağlantısı yoktur. Bu, **Türkiye** Migros'udur (migros.com.tr) — İsviçre Migros'unun npm'deki ilgisiz `migros-mcp` paketiyle karıştırılmamalıdır.
|
|
6
|
+
|
|
7
|
+
## Yapay zekâ ajanları için
|
|
8
|
+
|
|
9
|
+
MCP istemcinize ekleyin (stdio):
|
|
10
|
+
|
|
11
|
+
```json
|
|
12
|
+
{
|
|
13
|
+
"mcpServers": {
|
|
14
|
+
"migros": {
|
|
15
|
+
"command": "uvx",
|
|
16
|
+
"args": ["migros-mcp"]
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
## Araçlar
|
|
23
|
+
|
|
24
|
+
| Araç | Açıklama |
|
|
25
|
+
|------|----------|
|
|
26
|
+
| `migros_search_products` | Ürün arama — `query` ("süt", "ekmek"…), `page`, `sort`: relevance / best_seller / discount / discount_amount / price_asc / price_desc |
|
|
27
|
+
| `migros_get_product` | Tek ürünün detayı — `product_id` (arama sonuçlarından) |
|
|
28
|
+
| `migros_list_categories` | Üst düzey mağaza kategorileri (11) |
|
|
29
|
+
| `migros_list_promotions` | Bir anahtar kelime için Money indirimli ürünler, en yüksek indirim önce |
|
|
30
|
+
| `migros_price_stats` | Bir anahtar kelime için fiyat istatistikleri (min/medyan/maks/ortalama, en ucuz ve en pahalı) |
|
|
31
|
+
|
|
32
|
+
Notlar:
|
|
33
|
+
- Fiyatlar Türk Lirası (TRY); API kuruş (1/100 TRY) döndürür.
|
|
34
|
+
- `money_discount_pct`, Money sadakat indirim yüzdesidir — etiket indirimi değildir; raf fiyatı misafirin ödediği fiyattır.
|
|
35
|
+
- Aramanın ilk sonucu genelde sponsorlu/sabitlenmiş üründür; geri kalanlar istenen sıralamayı izler.
|
|
36
|
+
- Veri: Migros'un herkese açık `product-bff` JSON API'si — anahtar yok, giriş yok, salt-okunur.
|
|
37
|
+
- Mağaza bulma ve teslimat saatleri oturum gerektirdiği için bu sunucuda yoktur.
|
|
38
|
+
|
|
39
|
+
## Kurallar
|
|
40
|
+
|
|
41
|
+
Gayriresmî ve salt-okunur — giriş yok, API anahtarı yok, yazma yok. Testler: çevrimdışı fixture + canlı testler (15/15 yeşil).
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# migros-mcp 🇹🇷
|
|
2
|
+
|
|
3
|
+
mcp-name: io.github.mohammad-abbasi-sh/migros-mcp
|
|
4
|
+
|
|
5
|
+
Unofficial **read-only** MCP server for **Migros Sanal Market** (migros.com.tr), Türkiye's largest supermarket chain — live product search, prices, Money-discount promotions, categories and price stats.
|
|
6
|
+
|
|
7
|
+
> Part of the "Turkey MCP factory". Not affiliated with Migros. Note: this is the **Turkish** Migros (migros.com.tr) — not the Swiss Migros, which has its own unrelated `migros-mcp` on npm. Price comparison across chains is covered by `yibudak/marketfiyati_mcp` (marketfiyati.org.tr); this server covers Migros's own catalogue, promos and categories.
|
|
8
|
+
|
|
9
|
+
## For AI agents
|
|
10
|
+
|
|
11
|
+
Add to your MCP client config (stdio):
|
|
12
|
+
|
|
13
|
+
```json
|
|
14
|
+
{
|
|
15
|
+
"mcpServers": {
|
|
16
|
+
"migros": {
|
|
17
|
+
"command": "uvx",
|
|
18
|
+
"args": ["migros-mcp"]
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
Or run locally: `python -m migros_mcp.server` (needs `mcp<2`, `curl-cffi`).
|
|
25
|
+
|
|
26
|
+
## Tools
|
|
27
|
+
|
|
28
|
+
| Tool | Description |
|
|
29
|
+
|------|-------------|
|
|
30
|
+
| `migros_search_products` | Search products — `query` (Turkish, e.g. "süt"), `page`, `sort`: relevance / best_seller / discount / discount_amount / price_asc / price_desc |
|
|
31
|
+
| `migros_get_product` | Full detail for one product — `product_id` (numeric, from search) |
|
|
32
|
+
| `migros_list_categories` | Top-level store categories (11) |
|
|
33
|
+
| `migros_list_promotions` | Money-discounted products for a keyword, best discount first |
|
|
34
|
+
| `migros_price_stats` | Price stats (min/median/max/mean, cheapest & priciest) for a keyword |
|
|
35
|
+
|
|
36
|
+
Example output (`migros_search_products` / "süt", price_asc):
|
|
37
|
+
|
|
38
|
+
```json
|
|
39
|
+
{"query": "süt", "hit_count": 371, "page_count": 13, "count": 36,
|
|
40
|
+
"products": [{"id": 20000011010208, "name": "Sütaş Latte 1 L",
|
|
41
|
+
"brand": "Sütaş", "category": "Uzun Ömürlü Süt",
|
|
42
|
+
"price_tl": 189.0, "money_discount_pct": 0, ...}]}
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
Notes:
|
|
46
|
+
- Prices are Turkish Lira (TRY); the API reports kuruş (1/100 TRY).
|
|
47
|
+
- `money_discount_pct` is the **Money-loyalty discount** percentage, not a strikethrough — the shelf price is what a guest pays.
|
|
48
|
+
- The first search result is often a sponsored/pinned product; the rest follow the requested sort.
|
|
49
|
+
- Data: Migros's public `product-bff` JSON API (`migros.com.tr/rest/product-bff`) — no key, no login, read-only.
|
|
50
|
+
- Store lookup and delivery slots need an authenticated session, so this server does not offer them.
|
|
51
|
+
|
|
52
|
+
## Development
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
python3 -m venv .venv && .venv/bin/pip install "mcp<2" curl-cffi pytest
|
|
56
|
+
.venv/bin/python -m pytest tests/ -q
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
- `tests/test_products.py` — offline, parses real captured API fixtures
|
|
60
|
+
- `tests/test_live.py` — 4 cautious live requests against migros.com.tr
|
|
61
|
+
|
|
62
|
+
## License
|
|
63
|
+
|
|
64
|
+
MIT
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["hatchling"]
|
|
3
|
+
build-backend = "hatchling.build"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "migros-mcp"
|
|
7
|
+
version = "0.1.0"
|
|
8
|
+
description = "Unofficial read-only MCP server for Migros Sanal Market (migros.com.tr) — product search, prices, promos, categories"
|
|
9
|
+
readme = "README.md"
|
|
10
|
+
license = { text = "MIT" }
|
|
11
|
+
requires-python = ">=3.10"
|
|
12
|
+
dependencies = [
|
|
13
|
+
"mcp<2",
|
|
14
|
+
"curl-cffi>=0.7",
|
|
15
|
+
]
|
|
16
|
+
authors = [{ name = "Mohammad Abbasi" }]
|
|
17
|
+
|
|
18
|
+
[project.scripts]
|
|
19
|
+
migros-mcp = "migros_mcp.server:main"
|
|
20
|
+
|
|
21
|
+
[tool.hatch.build.targets.wheel]
|
|
22
|
+
packages = ["src/migros_mcp"]
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"$schema":"https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json","description":"Unofficial read-only MCP server for Migros Sanal Market — search, prices, promos, categories.","name":"io.github.mohammad-abbasi-sh/migros-mcp","packages":[{"identifier":"migros-mcp","registryBaseUrl":"https://pypi.org","registryType":"pypi","transport":{"type":"stdio"},"version":"0.1.0"}],"repository":{"source":"github","url":"https://github.com/mohammad-abbasi-sh/migros-mcp"},"title":"Migros Sanal Market","version":"0.1.0","websiteUrl":"https://github.com/mohammad-abbasi-sh/migros-mcp"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
"""HTTP layer for migros_mcp.
|
|
2
|
+
|
|
3
|
+
Migros Sanal Market (migros.com.tr) exposes a public, no-auth JSON REST
|
|
4
|
+
API under /rest/product-bff — the same endpoints its Angular storefront
|
|
5
|
+
calls (base URLs are published in the storefront's own env.js). Verified
|
|
6
|
+
live 2026-11-07: product search, product detail and categories all return
|
|
7
|
+
200 JSON with a plain browser UA (curl-cffi chrome120). No login, no API
|
|
8
|
+
key, no session cookies. Requests are kept gentle (one at a time,
|
|
9
|
+
~0.8s apart) and read-only.
|
|
10
|
+
|
|
11
|
+
Known limits (verified 2026-11-07, do not retry): the delivery-bff
|
|
12
|
+
endpoints (store lookup, delivery slots) return 403 Forbidden without an
|
|
13
|
+
authenticated session, so this server has no store/slot tools; the
|
|
14
|
+
category-products endpoint hangs — promotions come from the search API
|
|
15
|
+
instead (sort by discount percentage + Money-discount filter).
|
|
16
|
+
"""
|
|
17
|
+
from __future__ import annotations
|
|
18
|
+
|
|
19
|
+
import time
|
|
20
|
+
from urllib.parse import quote
|
|
21
|
+
|
|
22
|
+
from curl_cffi import requests as _r
|
|
23
|
+
|
|
24
|
+
BASE = "https://www.migros.com.tr/rest/product-bff"
|
|
25
|
+
TIMEOUT = 30.0
|
|
26
|
+
MIN_INTERVAL = 0.8 # seconds between requests — be polite
|
|
27
|
+
|
|
28
|
+
_HEADERS = {
|
|
29
|
+
"Accept-Language": "tr-TR,tr;q=0.9,en;q=0.8",
|
|
30
|
+
"Accept": "application/json",
|
|
31
|
+
"X-Requested-With": "XMLHttpRequest",
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
_last_fetch = 0.0
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
class MigrosError(RuntimeError):
|
|
38
|
+
pass
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
def _get(url: str) -> dict:
|
|
42
|
+
global _last_fetch
|
|
43
|
+
wait = MIN_INTERVAL - (time.monotonic() - _last_fetch)
|
|
44
|
+
if wait > 0:
|
|
45
|
+
time.sleep(wait)
|
|
46
|
+
try:
|
|
47
|
+
resp = _r.get(url, impersonate="chrome120", headers=_HEADERS, timeout=TIMEOUT)
|
|
48
|
+
except Exception as e:
|
|
49
|
+
raise MigrosError(f"network error fetching {url}: {e}") from e
|
|
50
|
+
finally:
|
|
51
|
+
_last_fetch = time.monotonic()
|
|
52
|
+
if resp.status_code == 404:
|
|
53
|
+
raise MigrosError(f"Migros returned HTTP 404 for {url}")
|
|
54
|
+
if resp.status_code != 200:
|
|
55
|
+
raise MigrosError(f"Migros returned HTTP {resp.status_code} for {url}")
|
|
56
|
+
try:
|
|
57
|
+
return resp.json()
|
|
58
|
+
except ValueError as e:
|
|
59
|
+
raise MigrosError(f"Migros returned non-JSON for {url}") from e
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
def search_products(query: str, page: int = 0, sort: str = "akilli-siralama") -> dict:
|
|
63
|
+
"""Search the Migros catalogue. sort: requestParam slug, e.g.
|
|
64
|
+
akilli-siralama, cok-satanlar, indirim-yuzdesine-gore,
|
|
65
|
+
indirim-miktarina-gore, once-en-dusuk-fiyat, once-en-yuksek-fiyat.
|
|
66
|
+
Note: the first result is often a sponsored/pinned product; the rest
|
|
67
|
+
follow the requested sort."""
|
|
68
|
+
q = quote(query.strip())
|
|
69
|
+
return _get(f"{BASE}/products/search?q={q}&page={page}&sort={sort}")
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
def search_discounted(query: str, page: int = 0) -> dict:
|
|
73
|
+
"""Search with the Money-discount aggregation filter applied."""
|
|
74
|
+
q = quote(query.strip())
|
|
75
|
+
return _get(
|
|
76
|
+
f"{BASE}/products/search?q={q}&page={page}"
|
|
77
|
+
f"&sort=indirim-yuzdesine-gore&indirim=MCC"
|
|
78
|
+
)
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
def get_product(product_id: int) -> dict:
|
|
82
|
+
"""One product's full detail by numeric id."""
|
|
83
|
+
return _get(f"{BASE}/products/{int(product_id)}")
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
def list_categories() -> dict:
|
|
87
|
+
"""Top-level store categories."""
|
|
88
|
+
return _get(f"{BASE}/categories")
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
"""Domain logic: parse Migros Sanal Market product-bff JSON into compact dicts (stdlib only).
|
|
2
|
+
|
|
3
|
+
Prices in the API are integer kuruş (1/100 TRY): 18900 -> 189.00 TRY.
|
|
4
|
+
``discount_rate`` is the Money-loyalty discount percentage (the "Money
|
|
5
|
+
İndirimli" aggregation); the shelf price (sale_price) already reflects
|
|
6
|
+
the price a guest pays — the discount is a Money-card benefit, not a
|
|
7
|
+
strikethrough. We surface it as ``money_discount_pct`` so nobody mistakes
|
|
8
|
+
it for a price cut.
|
|
9
|
+
"""
|
|
10
|
+
from __future__ import annotations
|
|
11
|
+
|
|
12
|
+
import html
|
|
13
|
+
import re
|
|
14
|
+
import statistics
|
|
15
|
+
|
|
16
|
+
PRODUCT_URL = "https://www.migros.com.tr/urun/{}"
|
|
17
|
+
|
|
18
|
+
SORTS = {
|
|
19
|
+
"relevance": "akilli-siralama",
|
|
20
|
+
"best_seller": "cok-satanlar",
|
|
21
|
+
"discount": "indirim-yuzdesine-gore",
|
|
22
|
+
"discount_amount": "indirim-miktarina-gore",
|
|
23
|
+
"price_asc": "once-en-dusuk-fiyat",
|
|
24
|
+
"price_desc": "once-en-yuksek-fiyat",
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
def _tl(kurus: int | float | None) -> float | None:
|
|
29
|
+
if kurus is None:
|
|
30
|
+
return None
|
|
31
|
+
try:
|
|
32
|
+
return round(float(kurus) / 100.0, 2)
|
|
33
|
+
except (TypeError, ValueError):
|
|
34
|
+
return None
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
def _strip_html(text: str | None) -> str:
|
|
38
|
+
if not text:
|
|
39
|
+
return ""
|
|
40
|
+
text = re.sub(r"<[^>]+>", " ", text)
|
|
41
|
+
text = html.unescape(text)
|
|
42
|
+
return re.sub(r"\s+", " ", text).strip()
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
def _image(p: dict) -> str | None:
|
|
46
|
+
for img in p.get("images") or []:
|
|
47
|
+
urls = img.get("urls") or {}
|
|
48
|
+
for key in ("PRODUCT_DETAIL", "PRODUCT_LIST", "PRODUCT_HD"):
|
|
49
|
+
if urls.get(key):
|
|
50
|
+
return urls[key]
|
|
51
|
+
return None
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
def parse_product(p: dict) -> dict:
|
|
55
|
+
"""One storeProductInfo / product-detail record -> compact dict."""
|
|
56
|
+
price = _tl(p.get("salePrice"))
|
|
57
|
+
regular = _tl(p.get("regularPrice"))
|
|
58
|
+
asc = p.get("categoryAscendants") or []
|
|
59
|
+
return {
|
|
60
|
+
"id": p.get("id"),
|
|
61
|
+
"sku": p.get("sku"),
|
|
62
|
+
"name": (p.get("name") or "").strip(),
|
|
63
|
+
"brand": ((p.get("brand") or {}).get("name") or "").strip(),
|
|
64
|
+
"category": ((p.get("category") or {}).get("name") or "").strip(),
|
|
65
|
+
"category_path": [a.get("name") for a in asc if a.get("name")],
|
|
66
|
+
"price_tl": price,
|
|
67
|
+
"regular_price_tl": regular,
|
|
68
|
+
"money_discount_pct": p.get("discountRate") or 0,
|
|
69
|
+
"unit": p.get("unit"),
|
|
70
|
+
"saleable": bool(p.get("saleable", True)),
|
|
71
|
+
"image_url": _image(p),
|
|
72
|
+
"url": PRODUCT_URL.format(p["prettyName"]) if p.get("prettyName") else None,
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
def parse_search(payload: dict, query: str, page: int = 0) -> dict:
|
|
77
|
+
"""Parse a /products/search response."""
|
|
78
|
+
if not payload.get("successful", True):
|
|
79
|
+
raise ValueError(f"Migros search failed: {payload.get('errorDetail') or payload}")
|
|
80
|
+
data = payload.get("data") or {}
|
|
81
|
+
products = [parse_product(p) for p in data.get("storeProductInfos") or []]
|
|
82
|
+
return {
|
|
83
|
+
"query": query,
|
|
84
|
+
"page": page,
|
|
85
|
+
"hit_count": data.get("hitCount", len(products)),
|
|
86
|
+
"page_count": data.get("pageCount", 0),
|
|
87
|
+
"count": len(products),
|
|
88
|
+
"products": products,
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
def parse_product_detail(payload: dict) -> dict:
|
|
93
|
+
"""Parse a /products/{id} response."""
|
|
94
|
+
if not payload.get("successful", True):
|
|
95
|
+
raise ValueError(f"Migros product lookup failed: {payload.get('errorDetail') or payload}")
|
|
96
|
+
data = payload.get("data") or {}
|
|
97
|
+
d = parse_product(data)
|
|
98
|
+
d["description"] = _strip_html(data.get("description"))[:2000]
|
|
99
|
+
d["short_description"] = _strip_html(data.get("shortDescription"))[:500]
|
|
100
|
+
return d
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
def parse_categories(payload: dict) -> list[dict]:
|
|
104
|
+
"""Parse a /categories response (top-level categories)."""
|
|
105
|
+
if not payload.get("successful", True):
|
|
106
|
+
raise ValueError(f"Migros categories failed: {payload.get('errorDetail') or payload}")
|
|
107
|
+
out = []
|
|
108
|
+
for item in payload.get("data") or []:
|
|
109
|
+
c = item.get("data") or {}
|
|
110
|
+
img = None
|
|
111
|
+
for im in c.get("images") or []:
|
|
112
|
+
urls = im.get("urls") or {}
|
|
113
|
+
img = urls.get("x1") or urls.get("x3")
|
|
114
|
+
if img:
|
|
115
|
+
break
|
|
116
|
+
out.append(
|
|
117
|
+
{
|
|
118
|
+
"id": c.get("id"),
|
|
119
|
+
"name": c.get("name"),
|
|
120
|
+
"pretty_name": c.get("prettyName"),
|
|
121
|
+
"image_url": img,
|
|
122
|
+
}
|
|
123
|
+
)
|
|
124
|
+
return out
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
def price_stats(products: list[dict]) -> dict:
|
|
128
|
+
"""Min/median/max/mean over a list of parsed products with prices."""
|
|
129
|
+
prices = [p["price_tl"] for p in products if p.get("price_tl") is not None]
|
|
130
|
+
if not prices:
|
|
131
|
+
return {"count": 0, "error": "no priced products in this result set"}
|
|
132
|
+
cheapest = min(products, key=lambda p: p["price_tl"] if p.get("price_tl") is not None else float("inf"))
|
|
133
|
+
priciest = max(products, key=lambda p: p["price_tl"] if p.get("price_tl") is not None else float("-inf"))
|
|
134
|
+
return {
|
|
135
|
+
"count": len(prices),
|
|
136
|
+
"min_tl": min(prices),
|
|
137
|
+
"median_tl": round(statistics.median(prices), 2),
|
|
138
|
+
"max_tl": max(prices),
|
|
139
|
+
"mean_tl": round(statistics.mean(prices), 2),
|
|
140
|
+
"cheapest": {"name": cheapest["name"], "price_tl": cheapest["price_tl"]},
|
|
141
|
+
"priciest": {"name": priciest["name"], "price_tl": priciest["price_tl"]},
|
|
142
|
+
}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
"""MCP server: unofficial read-only access to Migros Sanal Market (migros.com.tr)."""
|
|
2
|
+
from __future__ import annotations
|
|
3
|
+
|
|
4
|
+
import json
|
|
5
|
+
import sys
|
|
6
|
+
|
|
7
|
+
from mcp.server.fastmcp import FastMCP
|
|
8
|
+
|
|
9
|
+
from . import http as _http
|
|
10
|
+
from . import products as _p
|
|
11
|
+
|
|
12
|
+
mcp = FastMCP("migros-mcp")
|
|
13
|
+
|
|
14
|
+
INSTRUCTIONS = """\
|
|
15
|
+
Unofficial read-only MCP server for Migros Sanal Market (migros.com.tr), \
|
|
16
|
+
Türkiye's largest supermarket chain — live catalogue search, product \
|
|
17
|
+
detail, categories, Money-discount promotions and price stats from \
|
|
18
|
+
Migros's public product-bff JSON API. No login, no API key, read-only. \
|
|
19
|
+
Prices are in Turkish Lira (TRY); the API reports kuruş (1/100 TRY). \
|
|
20
|
+
``money_discount_pct`` is the Money-loyalty discount percentage, not a \
|
|
21
|
+
strikethrough — the shelf price is what a guest pays. Store lookup and \
|
|
22
|
+
delivery slots need an authenticated session, so this server does not \
|
|
23
|
+
offer them. Built by Mohammad Abbasi \
|
|
24
|
+
(github.com/mohammad-abbasi-sh/migros-mcp).\
|
|
25
|
+
"""
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
def _err(e: Exception) -> str:
|
|
29
|
+
return json.dumps({"error": str(e)}, ensure_ascii=False)
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
@mcp.tool()
|
|
33
|
+
def migros_search_products(query: str, page: int = 0, sort: str = "relevance") -> str:
|
|
34
|
+
"""Search Migros products by keyword (Turkish, e.g. "süt", "ekmek"). \
|
|
35
|
+
sort: relevance | best_seller | discount | discount_amount | price_asc | price_desc. \
|
|
36
|
+
Returns up to 36 products per page with prices in TRY."""
|
|
37
|
+
key = sort.strip().lower()
|
|
38
|
+
if key not in _p.SORTS:
|
|
39
|
+
return json.dumps(
|
|
40
|
+
{"error": f"unknown sort {sort!r}", "known_sorts": sorted(_p.SORTS)},
|
|
41
|
+
ensure_ascii=False,
|
|
42
|
+
)
|
|
43
|
+
try:
|
|
44
|
+
return json.dumps(
|
|
45
|
+
_p.parse_search(_http.search_products(query, page, _p.SORTS[key]), query, page),
|
|
46
|
+
ensure_ascii=False,
|
|
47
|
+
)
|
|
48
|
+
except (_http.MigrosError, ValueError) as e:
|
|
49
|
+
return _err(e)
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
@mcp.tool()
|
|
53
|
+
def migros_get_product(product_id: int) -> str:
|
|
54
|
+
"""Full detail for one Migros product by numeric id (from search results)."""
|
|
55
|
+
try:
|
|
56
|
+
return json.dumps(_p.parse_product_detail(_http.get_product(product_id)), ensure_ascii=False)
|
|
57
|
+
except (_http.MigrosError, ValueError) as e:
|
|
58
|
+
return _err(e)
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
@mcp.tool()
|
|
62
|
+
def migros_list_categories() -> str:
|
|
63
|
+
"""Top-level Migros store categories (id, name, link slug)."""
|
|
64
|
+
try:
|
|
65
|
+
cats = _p.parse_categories(_http.list_categories())
|
|
66
|
+
return json.dumps({"count": len(cats), "categories": cats}, ensure_ascii=False)
|
|
67
|
+
except (_http.MigrosError, ValueError) as e:
|
|
68
|
+
return _err(e)
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
@mcp.tool()
|
|
72
|
+
def migros_list_promotions(query: str, limit: int = 10) -> str:
|
|
73
|
+
"""Discounted (Money-indirimli) products for a keyword, best discount first. \
|
|
74
|
+
query: e.g. "süt", "çay", "deterjan". money_discount_pct is the Money-loyalty \
|
|
75
|
+
discount, not a price cut — see the server instructions."""
|
|
76
|
+
try:
|
|
77
|
+
res = _p.parse_search(_http.search_discounted(query), query)
|
|
78
|
+
except (_http.MigrosError, ValueError) as e:
|
|
79
|
+
return _err(e)
|
|
80
|
+
discounted = [p for p in res["products"] if (p.get("money_discount_pct") or 0) > 0]
|
|
81
|
+
discounted.sort(key=lambda p: p["money_discount_pct"], reverse=True)
|
|
82
|
+
return json.dumps(
|
|
83
|
+
{
|
|
84
|
+
"query": query,
|
|
85
|
+
"hit_count": res["hit_count"],
|
|
86
|
+
"count": min(len(discounted), max(limit, 0)),
|
|
87
|
+
"products": discounted[: max(limit, 0)],
|
|
88
|
+
},
|
|
89
|
+
ensure_ascii=False,
|
|
90
|
+
)
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
@mcp.tool()
|
|
94
|
+
def migros_price_stats(query: str) -> str:
|
|
95
|
+
"""Price statistics (min/median/max/mean, cheapest & priciest) for a \
|
|
96
|
+
keyword's first page of Migros search results (up to 36 products)."""
|
|
97
|
+
try:
|
|
98
|
+
res = _p.parse_search(_http.search_products(query, 0, "akilli-siralama"), query)
|
|
99
|
+
except (_http.MigrosError, ValueError) as e:
|
|
100
|
+
return _err(e)
|
|
101
|
+
stats = _p.price_stats(res["products"])
|
|
102
|
+
return json.dumps({"query": query, "hit_count": res["hit_count"], **stats}, ensure_ascii=False)
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
def main() -> None:
|
|
106
|
+
mcp.run()
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
if __name__ == "__main__":
|
|
110
|
+
sys.exit(main())
|
|
File without changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"successful":true,"violations":[],"data":[{"data":{"id":20000000072311,"name":"Tüm İndirimli Ürünler","parentId":20000000000000,"prettyName":"tum-indirimli-urunler-dt-0","images":[{"urls":{"x1":"https://images.migrosone.com/sanalmarket/category/list/72311/indirim-f3a481.png","x3":"https://images.migrosone.com/sanalmarket/category/list/72311/indirim-f3a481-360x360.png"}}],"color":"#FFE8E1","specialCategory":true}},{"data":{"id":20000000073584,"name":"Yaşam & Beslenme Tarzı","parentId":20000000000000,"prettyName":"beslenme-yasam-tarzi-ptt-1","images":[{"urls":{"x1":"https://images.migrosone.com/sanalmarket/category/list/73584/beslenme-a03f7e.png","x3":"https://images.migrosone.com/sanalmarket/category/list/73584/beslenme-a03f7e-360x360.png"}}],"color":"#EAF7DA","specialCategory":true}},{"data":{"id":20000000072310,"name":"Sadece Migros'ta","parentId":20000000000000,"prettyName":"sadece-migrosta-ptt-2","iconUrl":"https://images.migrosone.com/sanalmarket/custom/m-beyaz-logo-360x360-c24d3275.png","images":[{"urls":{"x1":"https://images.migrosone.com/sanalmarket/category/list/72310/migros-580baf.png","x3":"https://images.migrosone.com/sanalmarket/category/list/72310/migros-580baf-360x360.png"}}],"color":"#FFF3E7","specialCategory":true}},{"data":{"id":20000000072420,"name":"Migroskop","parentId":20000000000000,"prettyName":"migroskop-urunleri-dt-3","images":[{"urls":{"x1":"https://images.migrosone.com/sanalmarket/category/list/72420/migroskop-572978.png","x3":"https://images.migrosone.com/sanalmarket/category/list/72420/migroskop-572978-360x360.png"}}],"color":"#FDF3CF","specialCategory":true}},{"data":{"id":20000000074746,"name":"Migros Ekstra","parentId":20000000000000,"prettyName":"migros-ekstra-c-123fa","images":[{"urls":{"x1":"https://images.migrosone.com/sanalmarket/category/list/74746/mekstrakategoriicon-sm-9088ca.png","x3":"https://images.migrosone.com/sanalmarket/category/list/74746/mekstrakategoriicon-sm-9088ca-360x360.png"}}],"specialCategory":false,"onboardingVisible":false}},{"data":{"id":20000000074872,"name":"Maç Özel","parentId":20000000000000,"prettyName":"mac-ozel-c-12478","images":[{"urls":{"x1":"https://images.migrosone.com/sanalmarket/category/list/74872/macozel-9a69be.png","x3":"https://images.migrosone.com/sanalmarket/category/list/74872/macozel-9a69be-360x360.png"}}],"specialCategory":false,"onboardingVisible":false}},{"data":{"id":20000000079033,"name":"Seçkin Lezzetler!","parentId":20000000000000,"prettyName":"seckin-lezzetler-c-134b9","iconUrl":"https://images.migrosone.com/hemen/category/list/79034/hm-cf5436-360x360.png","images":[{"urls":{"x1":"https://images.migrosone.com/sanalmarket/category/list/79033/sm-ffebb7.png","x3":"https://images.migrosone.com/sanalmarket/category/list/79033/sm-ffebb7-360x360.png"}}],"specialCategory":false,"onboardingVisible":false}},{"data":{"id":20000000000004,"name":"Süt, Kahvaltılık","parentId":20000000000000,"prettyName":"sut-kahvaltilik-c-4","iconUrl":"https://images.migrosone.com/sutkahvaltilik-2a2540fe.png","images":[{"urls":{"x1":"https://images.migrosone.com/sanalmarket/category/list/4/nesfit-granola-sanal-sponsorlu-template-403f2f.png","x3":"https://images.migrosone.com/sanalmarket/category/list/4/nesfit-granola-sanal-sponsorlu-template-403f2f-360x360.png"}}],"specialCategory":false}},{"data":{"id":20000000000125,"name":"Hazır Yemek, Meze","parentId":20000000000000,"prettyName":"hazir-yemek-meze-c-7d","images":[{"urls":{"x1":"https://images.migrosone.com/sanalmarket/category/list/125/resim-7b4d68.png","x3":"https://images.migrosone.com/sanalmarket/category/list/125/resim-7b4d68-360x360.png"}}],"specialCategory":false}},{"data":{"id":20000000000010,"name":"Ev, Yaşam","parentId":20000000000000,"prettyName":"ev-yasam-c-a","iconUrl":"https://images.migrosone.com/evpet-9865ad95.png","images":[{"urls":{"x1":"https://images.migrosone.com/sanalmarket/category/list/10/evyasam-96a8c0.png","x3":"https://images.migrosone.com/sanalmarket/category/list/10/evyasam-96a8c0-360x360.png"}}],"specialCategory":false}},{"data":{"id":20000000071916,"name":"Kitap, Kırtasiye, Oyuncak","parentId":20000000000000,"prettyName":"kitap-kirtasiye-oyuncak-c-118ec","images":[{"urls":{"x1":"https://images.migrosone.com/sanalmarket/category/list/71916/kirtasiye-97fc2c.png","x3":"https://images.migrosone.com/sanalmarket/category/list/71916/kirtasiye-97fc2c-360x360.png"}}],"specialCategory":false}}]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"successful":true,"violations":[],"data":{"id":20000011010208,"storeId":20000000000607,"storeGroupId":1,"warehouseId":607,"sku":"11010208","name":"Sütaş Latte 1 L","description":"<p><strong>İçindekiler</strong><br>%3 yağlı pastörize inek sütü (%80), su,şeker,kahve(%1,1),kahve aroma vericisi, kıvam arttırıcı (karboksi metil selüloz, karragenan) asitlik düzenleyici (potasyum fosfat). En az %2,4 süt yağı içerir.</p><p><strong>Alerjen Uyarısı</strong><br>inek sütü</p><p><strong>Net Miktar (g/ml)</strong><br>1000</p><p><strong>Saklama Koşulları</strong><br>0-4 °C muhafaza ediniz</p><p><strong>Menşei</strong><br>TÜRKİYE</p><p><strong>Kullanım Önerileri</strong><br>Ambalajdaki son tüketim tarihinden (STT) önce tüketiniz. İçmeden önce çalkalayınız. Ambalaj açıldıktan sonra buzdolabında saklanmalı ve 2 gün içinde tüketilmelidir.</p><p><strong>Ürün Bilgilerini Kullanma Hakkında</strong><br>İnternet sitemizde ve online satış kanallarımızda yer alan ürün etiket bilgileri, ürünün tedarikçisi tarafından Migros Ticaret A.Ş.’ye iletilen en güncel bilgilerdir. Ürün etiket bilgileri ile internet sitemiz ve online satış kanallarımızda bulunan bilgiler arasında herhangi bir farklılık bulunması halinde sorumluluk tamamen tedarikçi firmaya aittir.</p>","shortDescription":"","information":"<p><strong>İçindekiler</strong><br>%3 yağlı pastörize inek sütü (%80), su,şeker,kahve(%1,1),kahve aroma vericisi, kıvam arttırıcı (karboksi metil selüloz, karragenan) asitlik düzenleyici (potasyum fosfat). En az %2,4 süt yağı içerir.</p><p><strong>Alerjen Uyarısı</strong><br>inek sütü</p><p><strong>Net Miktar (g/ml)</strong><br>1000</p><p><strong>Saklama Koşulları</strong><br>0-4 °C muhafaza ediniz</p><p><strong>Menşei</strong><br>TÜRKİYE</p><p><strong>Kullanım Önerileri</strong><br>Ambalajdaki son tüketim tarihinden (STT) önce tüketiniz. İçmeden önce çalkalayınız. Ambalaj açıldıktan sonra buzdolabında saklanmalı ve 2 gün içinde tüketilmelidir.</p>","propertyLegalText":"<p><strong>Ürün Bilgilerini Kullanma Hakkında</strong><br>İnternet sitemizde ve online satış kanallarımızda yer alan ürün etiket bilgileri, ürünün tedarikçisi tarafından Migros Ticaret A.Ş.’ye iletilen en güncel bilgilerdir. Ürün etiket bilgileri ile internet sitemiz ve online satış kanallarımızda bulunan bilgiler arasında herhangi bir farklılık bulunması halinde sorumluluk tamamen tedarikçi firmaya aittir.</p>","returnPolicy":"<div class=\"form-area return-policy-area\">\n <div class=\"in\">\n <p><strong>İade Sürecini Nasıl Başlatabilirim?</strong></p>\n <p>Migros uygulamasından aldığınız ürünler için <strong>14 gün</strong> gün içinde cayma hakkınızı\n kullanabilirsiniz. Bunun dışında, <strong>30 gün</strong>\n içinde ilettiğiniz iade talepleri için müşteri memnuniyeti politikalarımız kapsamında iade talepleriniz\n değerlendirilecektir. İade sürecini 0850 200 40 00 telefon numarası üzerinden başlatabilirsiniz.</p>\n <p><strong>İade Koşulları:</strong></p>\n <p>Her türlü iadeler mutlak suretle orjinal kutu ve ürünün ambalajı (koruma bandı) bozulmaksızın yapılmalıdır.</p>\n <p>Ürün fatura aslınının iade/değişim bildirimi ile birlikte gönderilmesi gerekmektedir.</p>\n <p></p>\n <p>Elektronik ürünler ve cep telefonları yetkili servis garantisinde bulunmaktadır. Üründe yaşanan sorun ya da\n ayıplı mal yetkili servis tarafından belgelendikten sonra tarafımızca tüm aksesuarları ile birlikte iade olarak\n kabul edilmektedir. Cep telefonları ürünlerinde kutu içerisindeki garanti belgesinin kaşelenmesi için ürünün\n kutusu açılmakta ve orjinal ambalajı açık şekilde teslim edilmektedir.\n </p>\n <p></p>\n <p>Kurulum gerektiren elektronik ürünler yetkili servis çalışanları tarafından açıldıktan sonra, herhangi bir\n hasar/kusur/ayıp tespit edilmesi halinde tespit tutanağı doldurtulması gerekir. Tespit tutanağı olmayan veya\n yetkili servis kontrolü dışında açılmış olan ürünler için iade/değişim işlemi gerçekleştirilemez.</p>\n <p></p>\n <p>Kargo belgesi ile teslim edilen ürünler kargo görevlisi huzurunda açılmalıdır. Ürünün dış ambalajında hiç bir\n hasar, açıklık, darbe, ıslaklık vb. olmaması, buna rağmen ürünün hasarlı çıkması durumunda, mevcut durum bir\n tutanakla karşılıklı olarak imza altına alınmalıdır. Kargo görevlisi tutanağın 1 nüshasını müşteriye vermekle\n yükümlüdür. Ürün hasar tespit tutanağının ve fatura aslının iade/değişim bildirimi ile birlikte gönderilmesi\n gerekmektedir.</p>\n <p><strong>Cayma Hakkının Geçerli Olmadığı Durumlar</strong></p>\n <ul>\n <li>Fiyatı finansal piyasalardaki dalgalanmalara bağlı olarak değişen ve satıcının kontrolünde olmayan ürün veya\n hizmetler iade/değişim kapsamında değerlendirilmemektedir.\n </li>\n <li>Kişisel istekler doğrultusunda size özel olarak üretilen veya üzerinde değişiklik yapılan ürünler iade/değişim\n kapsamında degerlendirilmemektedir.\n </li>\n <li>Çabuk bozulabilen veya son kullanma tarihi geçebilecek ürünler iade/değişim kapsamında\n değerlendirilmemektedir.\n </li>\n <li>Sağlık veya hijyen açısından iadesi uygun olmayıp, tesliminden sonra ambalaj, bant, mühür, paket gibi koruyucu\n unsurları açılmış olan ürünler iade/değişim kapsamında değerlendirilmemektedir. (İç giyim, mayo, bikini, kişisel\n bakım, kozmetik ürünleri vb.)\n </li>\n <li>Tesliminden sonra başka ürünlerle karışan ve doğası gereği ayrıştırılması mümkün olmayan ürünler iade/değişim\n kapsamında değerlendirilmemektedir.\n </li>\n <li>Ürünün tesliminden sonra ambalajın açılmış olması halinde maddi ortamda sunulan kitap, dijital içerik ve\n bilgisayar sarf malzemeleri iade/değişim kapsamında değerlendirilmemektedir.\n </li>\n <li>Abonelik sözleşmesi kapsamında sağlananlar dışında, gazete, dergi gibi süreli yayınlar iade/değişim kapsamında\n değerlendirilmemektedir.\n </li>\n <li>Belirli bir tarihte veya dönemde yapılması gereken, konaklama, eşya taşıma, araba kiralama, yiyecek- içecek\n tedariki ve boş zamanın değerlendirilmesine ilişkin ürünler iade/değişim kapsamında değerlendirilmemektedir.\n </li>\n <li>Elektronik ortamda anında ifa edilen hizmetler veya anında teslim edilen gayrimaddi ürünler iade/değişim\n kapsamında değerlendirilmemektedir.\n </li>\n <li>Yiyecek ve içecek gibi günlük tüketim maddelerinin, satıcının düzenli teslimatları çerçevesinde tüketicinin\n meskenine veya işyerine gönderilmesi iade/değişim kapsamında değerlendirilmemektedir.\n </li>\n <li>Karayolları Trafik Yönetmeliği kapsamında tescile tabi taşıt niteliğinde olan tiny house, karavan vb.\n ürünler iade/değişim kapsamında değerlendirilmemektedir.\n </li>\n </ul>\n </div>\n</div>\n","brandId":730,"brand":{"name":"Sütaş","id":730,"prettyName":"sutas-b-2da"},"categoryId":18000000075684,"category":{"name":"Uzun Ömürlü Süt","id":18000000075684,"prettyName":"uzun-omurlu-sut-c-127a4"},"categoryAscendants":[{"name":"Süt","id":18000000075058,"prettyName":"sut-c-12532"},{"name":"Süt, Şarküteri, Kahvaltılık","id":18000000074924,"prettyName":"sut-sarkuteri-kahvaltilik-c-124ac"}],"shadowCategoryId":20000000001034,"shadowCategory":{"name":"Uzun Ömürlü Süt","id":20000000001034,"prettyName":"uzun-omurlu-sut-c-40a"},"shadowCategoryAscendants":[{"name":"Süt","id":20000000000108,"prettyName":"sut-c-6c"},{"name":"Süt, Kahvaltılık","id":20000000000004,"prettyName":"sut-kahvaltilik-c-4"}],"categoriesForSorting":[{"name":"Uzun Ömürlü Süt","id":18000000075684,"prettyName":"uzun-omurlu-sut-c-127a4"},{"name":"Süt","id":18000000075058,"prettyName":"sut-c-12532"},{"name":"Süt, Şarküteri, Kahvaltılık","id":18000000074924,"prettyName":"sut-sarkuteri-kahvaltilik-c-124ac"}],"lists":[{"name":"SÜTAŞ Ürünleri!","id":20000196923060,"prettyName":"sutas-urunleri-l-bbcceb4"},{"name":"Sütaş Ürünleri","id":20000196901553,"prettyName":"sutas-urunleri-l-bbc7ab1"},{"name":"Sütaş Ürünleri","id":20000196901316,"prettyName":"sutas-urunleri-l-bbc79c4"},{"name":"SÜTAŞ Ürünleri!","id":20000196920525,"prettyName":"sutas-urunleri-l-bbcc4cd"},{"name":"Kahvaltı \uD83E\uDD5B\uD83E\uDDC0\uD83E\uDD5A","id":20000196920549,"prettyName":"kahvalti-l-bbcc4e5"}],"images":[{"urls":{"PRODUCT_LIST":"https://images.migrosone.com/sanalmarket/product/11010208/11010208_1-2ec412-105x105.jpg","PRODUCT_DETAIL":"https://images.migrosone.com/sanalmarket/product/11010208/11010208_1-2ec412.jpg","PRODUCT_HD":"https://images.migrosone.com/sanalmarket/product/11010208/11010208_1-2ec412-1650x1650.jpg","CART":"https://images.migrosone.com/sanalmarket/product/11010208/11010208_1-2ec412-46x46.jpg"},"productId":20000011010208}],"energyImages":[],"prettyName":"sutas-latte-1-l-p-a800a0","productInstallmentInfo":{"installmentApplicable":false,"maxInstallmentCount":1,"installmentDescription":"<p><strong>Ödeme ve Taksit Seçenekleri Hakkında</strong><br>Sepetinizde taksit seçeneği birbirinden farklı ürünlerin yer alması halinde, uygulanabilecek taksit sayısı, taksit seçeneği en düşük olan ürün baz alınarak belirlenir.<br>Taksit ve vade farkı uygulamalarında tek taraflı değişiklik yapılması hakkı saklıdır.</p>"},"productOptionInfos":[],"propertyInfosMap":{"OTHER":[{"id":20000000000487,"type":"OTHER","name":"Gıda","priority":1,"customId":"foodProperty","value":"E"}],"LEGAL":[{"id":20000000000420,"type":"LEGAL","name":"Kurye İçin Ağırlık","priority":3,"customId":"courier_weight","value":"1085"},{"id":20000000000372,"type":"LEGAL","name":"İşletmeci / Üretici / İthalatçı / Dağıtıcı Adresi","priority":10,"customId":"productSupplierAddress","value":"ULUABAT KÖYÜ . KARACABEY BURSA"}],"MAIN":[{"id":20000000000054,"type":"MAIN","name":"İçindekiler","priority":1,"value":"%3 yağlı pastörize inek sütü (%80), su,şeker,kahve(%1,1),kahve aroma vericisi, kıvam arttırıcı (karboksi metil selüloz, karragenan) asitlik düzenleyici (potasyum fosfat). En az %2,4 süt yağı içerir."},{"id":20000000000055,"type":"MAIN","name":"Alerjen Uyarısı","priority":2,"value":"inek sütü"},{"id":20000000000056,"type":"MAIN","name":"Net Miktar (g/ml)","priority":3,"customId":"netKg","value":"1000"},{"id":20000000000058,"type":"MAIN","name":"Saklama Koşulları","priority":4,"value":"0-4 °C muhafaza ediniz"},{"id":20000000000057,"type":"MAIN","name":"Menşei","priority":5,"customId":"country","value":"TÜRKİYE"},{"id":20000000000059,"type":"MAIN","name":"İşletmeci / Üretici / İthalatçı / Dağıtıcı","priority":7,"customId":"productSupplier","value":"SÜTAŞ SÜT ÜRÜNLERİ A.Ş."},{"id":20000000000289,"type":"MAIN","name":"İşletmeci / Üretici / İthalatçı / Dağıtıcı Numarası","priority":8,"customId":"productSupplierId","value":"020091"},{"id":20000000000060,"type":"MAIN","name":"Kullanım Önerileri","priority":11,"value":"Ambalajdaki son tüketim tarihinden (STT) önce tüketiniz. İçmeden önce çalkalayınız. Ambalaj açıldıktan sonra buzdolabında saklanmalı ve 2 gün içinde tüketilmelidir."}],"NUTRITIONAL":[{"id":20000000000029,"type":"NUTRITIONAL","name":"Enerji (kcal)","priority":1,"customId":"energyKcal","value":"64.0"},{"id":20000000000065,"type":"NUTRITIONAL","name":"Enerji (kJ)","priority":2,"customId":"energyKj","value":"266.0"},{"id":20000000000030,"type":"NUTRITIONAL","name":"Yağ (g)","priority":3,"customId":"fat","value":"2.4"},{"id":20000000000031,"type":"NUTRITIONAL","name":"Doymuş yağ (g)","priority":4,"customId":"saturatedFat","value":"1.6"},{"id":20000000000033,"type":"NUTRITIONAL","name":"Karbonhidrat (g)","priority":9,"customId":"carbohydrate","value":"8.2"},{"id":20000000000034,"type":"NUTRITIONAL","name":"Şeker (g)","priority":10,"customId":"glucose","value":"8.2"},{"id":20000000000036,"type":"NUTRITIONAL","name":"Protein (g)","priority":14,"customId":"protein","value":"2.3"},{"id":20000000000038,"type":"NUTRITIONAL","name":"Tuz (g)","priority":15,"customId":"salt","value":"0.1"}]},"specialDietTags":[],"crmDiscountTags":[],"attributeTags":[],"status":"IN_SALE","saleable":true,"unit":"PIECE","initialIncrementAmount":1,"incrementAmount":1,"maxAmount":8,"maxAmountDescription":"Bu üründen en fazla 8 adet sipariş verilebilir. Belirtilen adet üzerindeki siparişlerin iptal edilmesi hakkı saklıdır.","unitAmount":1,"regularPrice":18900,"salePrice":18900,"loyaltyPrice":18900,"shownPrice":18900,"discountRate":0,"discounts":{},"discountDescriptions":[],"badges":[],"storePortfolio":"MARKET","referrerEventId":"1794049555343121110","sponsored":false,"productNoteAppendable":false,"buyNowApplicable":false,"productSafetyInfo":{"productSupplierInfo":{"supplierDetails":[{"name":"İşletmeci / Üretici / İthalatçı / Dağıtıcı","value":"SÜTAŞ SÜT ÜRÜNLERİ A.Ş."},{"name":"İşletmeci / Üretici / İthalatçı / Dağıtıcı Numarası","value":"020091"},{"name":"İşletmeci / Üretici / İthalatçı / Dağıtıcı Adresi","value":"ULUABAT KÖYÜ . KARACABEY BURSA"}]},"productSafetyImageInfo":{"images":[{"urls":{"LEGAL":"https://images.migrosone.com/sanalmarket/product-legal/11010208/11010208_bicakizi-026086.jpg"},"productId":20000011010208}]}},"insuranceProductDetails":[],"groupBadgeMap":{},"sellerInfo":{"sellerId":20,"sellerName":"Migros Sanal Market"},"analytics":{"seller_type":"INTERNAL","store_id":20000000000607,"seller_id":20,"seller_name":"Migros Sanal Market","store_name":"BEYLİKDÜZÜ 5M MİGROS"},"sortedProperties":{},"generalInformation":"Ürünün stok, fiyat ve kampanya bilgisi, teslimatı gerçekleştirecek mağazanın stok, fiyat ve kampanya bilgilerine göre belirlenmektedir.","properties":{}}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"successful": true, "violations": [], "data": {"pageCount": 13, "hitCount": 371, "storeProductInfos": [{"id": 20000011010208, "storeId": 20000000000607, "storeGroupId": 1, "warehouseId": 607, "sku": "11010208", "name": "Sütaş Latte 1 L", "description": "<p><strong>İçindekiler</strong><br>%3 yağlı pastörize inek sütü (%80), su,şeker,kahve(%1,1),kahve aroma vericisi, kıvam arttırıcı (karboksi metil selüloz, karragenan) asitlik düzenleyici (potasyum fosfat). En az %2,4 süt yağı içerir.</p><p><strong>Alerjen Uyarısı</strong><br>inek sütü</p><p><strong>Net Miktar (g/ml)</strong><br>1000</p><p><strong>Saklama Koşulları</strong><br>0-4 °C muhafaza ediniz</p><p><strong>Menşei</strong><br>TÜRKİYE</p><p><strong>Kullanım Önerileri</strong><br>Ambalajdaki son tüketim tarihinden (STT) önce tüketiniz. İçmeden önce çalkalayınız. Ambalaj açıldıktan sonra buzdolabında saklanmalı ve 2 gün içinde tüketilmelidir.</p><p><strong>Ürün Bilgilerini Kullanma Hakkında</strong><br>İnternet sitemizde ve online satış kanallarımızda yer alan ürün etiket bilgileri, ürünün tedarikçisi tarafından Migros Ticaret A.Ş.’ye iletilen en güncel bilgilerdir. Ürün etiket bilgileri ile internet sitemiz ve online satış kanallarımızda bulunan bilgiler arasında herhangi bir farklılık bulunması halinde sorumluluk tamamen tedarikçi firmaya aittir.</p>", "shortDescription": "", "information": "<p><strong>İçindekiler</strong><br>%3 yağlı pastörize inek sütü (%80), su,şeker,kahve(%1,1),kahve aroma vericisi, kıvam arttırıcı (karboksi metil selüloz, karragenan) asitlik düzenleyici (potasyum fosfat). En az %2,4 süt yağı içerir.</p><p><strong>Alerjen Uyarısı</strong><br>inek sütü</p><p><strong>Net Miktar (g/ml)</strong><br>1000</p><p><strong>Saklama Koşulları</strong><br>0-4 °C muhafaza ediniz</p><p><strong>Menşei</strong><br>TÜRKİYE</p><p><strong>Kullanım Önerileri</strong><br>Ambalajdaki son tüketim tarihinden (STT) önce tüketiniz. İçmeden önce çalkalayınız. Ambalaj açıldıktan sonra buzdolabında saklanmalı ve 2 gün içinde tüketilmelidir.</p>", "propertyLegalText": "<p><strong>Ürün Bilgilerini Kullanma Hakkında</strong><br>İnternet sitemizde ve online satış kanallarımızda yer alan ürün etiket bilgileri, ürünün tedarikçisi tarafından Migros Ticaret A.Ş.’ye iletilen en güncel bilgilerdir. Ürün etiket bilgileri ile internet sitemiz ve online satış kanallarımızda bulunan bilgiler arasında herhangi bir farklılık bulunması halinde sorumluluk tamamen tedarikçi firmaya aittir.</p>", "returnPolicy": "<div class=\"form-area return-policy-area\">\n <div class=\"in\">\n <p><strong>İade Sürecini Nasıl Başlatabilirim?</strong></p>\n <p>Migros uygulamasından aldığınız ürünler için <strong>14 gün</strong> gün içinde cayma hakkınızı\n kullanabilirsiniz. Bunun dışında, <strong>30 gün</strong>\n içinde ilettiğiniz iade talepleri için müşteri memnuniyeti politikalarımız kapsamında iade talepleriniz\n değerlendirilecektir. İade sürecini 0850 200 40 00 telefon numarası üzerinden başlatabilirsiniz.</p>\n <p><strong>İade Koşulları:</strong></p>\n <p>Her türlü iadeler mutlak suretle orjinal kutu ve ürünün ambalajı (koruma bandı) bozulmaksızın yapılmalıdır.</p>\n <p>Ürün fatura aslınının iade/değişim bildirimi ile birlikte gönderilmesi gerekmektedir.</p>\n <p></p>\n <p>Elektronik ürünler ve cep telefonları yetkili servis garantisinde bulunmaktadır. Üründe yaşanan sorun ya da\n ayıplı mal yetkili servis tarafından belgelendikten sonra tarafımızca tüm aksesuarları ile birlikte iade olarak\n kabul edilmektedir. Cep telefonları ürünlerinde kutu içerisindeki garanti belgesinin kaşelenmesi için ürünün\n kutusu açılmakta ve orjinal ambalajı açık şekilde teslim edilmektedir.\n </p>\n <p></p>\n <p>Kurulum gerektiren elektronik ürünler yetkili servis çalışanları tarafından açıldıktan sonra, herhangi bir\n hasar/kusur/ayıp tespit edilmesi halinde tespit tutanağı doldurtulması gerekir. Tespit tutanağı olmayan veya\n yetkili servis kontrolü dışında açılmış olan ürünler için iade/değişim işlemi gerçekleştirilemez.</p>\n <p></p>\n <p>Kargo belgesi ile teslim edilen ürünler kargo görevlisi huzurunda açılmalıdır. Ürünün dış ambalajında hiç bir\n hasar, açıklık, darbe, ıslaklık vb. olmaması, buna rağmen ürünün hasarlı çıkması durumunda, mevcut durum bir\n tutanakla karşılıklı olarak imza altına alınmalıdır. Kargo görevlisi tutanağın 1 nüshasını müşteriye vermekle\n yükümlüdür. Ürün hasar tespit tutanağının ve fatura aslının iade/değişim bildirimi ile birlikte gönderilmesi\n gerekmektedir.</p>\n <p><strong>Cayma Hakkının Geçerli Olmadığı Durumlar</strong></p>\n <ul>\n <li>Fiyatı finansal piyasalardaki dalgalanmalara bağlı olarak değişen ve satıcının kontrolünde olmayan ürün veya\n hizmetler iade/değişim kapsamında değerlendirilmemektedir.\n </li>\n <li>Kişisel istekler doğrultusunda size özel olarak üretilen veya üzerinde değişiklik yapılan ürünler iade/değişim\n kapsamında degerlendirilmemektedir.\n </li>\n <li>Çabuk bozulabilen veya son kullanma tarihi geçebilecek ürünler iade/değişim kapsamında\n değerlendirilmemektedir.\n </li>\n <li>Sağlık veya hijyen açısından iadesi uygun olmayıp, tesliminden sonra ambalaj, bant, mühür, paket gibi koruyucu\n unsurları açılmış olan ürünler iade/değişim kapsamında değerlendirilmemektedir. (İç giyim, mayo, bikini, kişisel\n bakım, kozmetik ürünleri vb.)\n </li>\n <li>Tesliminden sonra başka ürünlerle karışan ve doğası gereği ayrıştırılması mümkün olmayan ürünler iade/değişim\n kapsamında değerlendirilmemektedir.\n </li>\n <li>Ürünün tesliminden sonra ambalajın açılmış olması halinde maddi ortamda sunulan kitap, dijital içerik ve\n bilgisayar sarf malzemeleri iade/değişim kapsamında değerlendirilmemektedir.\n </li>\n <li>Abonelik sözleşmesi kapsamında sağlananlar dışında, gazete, dergi gibi süreli yayınlar iade/değişim kapsamında\n değerlendirilmemektedir.\n </li>\n <li>Belirli bir tarihte veya dönemde yapılması gereken, konaklama, eşya taşıma, araba kiralama, yiyecek- içecek\n tedariki ve boş zamanın değerlendirilmesine ilişkin ürünler iade/değişim kapsamında değerlendirilmemektedir.\n </li>\n <li>Elektronik ortamda anında ifa edilen hizmetler veya anında teslim edilen gayrimaddi ürünler iade/değişim\n kapsamında değerlendirilmemektedir.\n </li>\n <li>Yiyecek ve içecek gibi günlük tüketim maddelerinin, satıcının düzenli teslimatları çerçevesinde tüketicinin\n meskenine veya işyerine gönderilmesi iade/değişim kapsamında değerlendirilmemektedir.\n </li>\n <li>Karayolları Trafik Yönetmeliği kapsamında tescile tabi taşıt niteliğinde olan tiny house, karavan vb.\n ürünler iade/değişim kapsamında değerlendirilmemektedir.\n </li>\n </ul>\n </div>\n</div>\n", "brandId": 730, "brand": {"name": "Sütaş", "id": 730, "prettyName": "sutas-b-2da"}, "categoryId": 18000000075684, "category": {"name": "Uzun Ömürlü Süt", "id": 18000000075684, "prettyName": "uzun-omurlu-sut-c-127a4"}, "categoryAscendants": [{"name": "Süt", "id": 18000000075058, "prettyName": "sut-c-12532"}, {"name": "Süt, Şarküteri, Kahvaltılık", "id": 18000000074924, "prettyName": "sut-sarkuteri-kahvaltilik-c-124ac"}], "shadowCategoryId": 20000000001034, "shadowCategory": {"name": "Uzun Ömürlü Süt", "id": 20000000001034, "prettyName": "uzun-omurlu-sut-c-40a"}, "shadowCategoryAscendants": [{"name": "Süt", "id": 20000000000108, "prettyName": "sut-c-6c"}, {"name": "Süt, Kahvaltılık", "id": 20000000000004, "prettyName": "sut-kahvaltilik-c-4"}], "categoriesForSorting": [{"name": "Uzun Ömürlü Süt", "id": 18000000075684, "prettyName": "uzun-omurlu-sut-c-127a4"}, {"name": "Süt", "id": 18000000075058, "prettyName": "sut-c-12532"}, {"name": "Süt, Şarküteri, Kahvaltılık", "id": 18000000074924, "prettyName": "sut-sarkuteri-kahvaltilik-c-124ac"}], "lists": [{"name": "SÜTAŞ Ürünleri!", "id": 20000196923060, "prettyName": "sutas-urunleri-l-bbcceb4"}, {"name": "Sütaş Ürünleri", "id": 20000196901553, "prettyName": "sutas-urunleri-l-bbc7ab1"}, {"name": "Sütaş Ürünleri", "id": 20000196901316, "prettyName": "sutas-urunleri-l-bbc79c4"}, {"name": "SÜTAŞ Ürünleri!", "id": 20000196920525, "prettyName": "sutas-urunleri-l-bbcc4cd"}, {"name": "Kahvaltı 🥛🧀🥚", "id": 20000196920549, "prettyName": "kahvalti-l-bbcc4e5"}], "images": [{"urls": {"PRODUCT_LIST": "https://images.migrosone.com/sanalmarket/product/11010208/11010208_1-2ec412-105x105.jpg", "PRODUCT_DETAIL": "https://images.migrosone.com/sanalmarket/product/11010208/11010208_1-2ec412.jpg", "PRODUCT_HD": "https://images.migrosone.com/sanalmarket/product/11010208/11010208_1-2ec412-1650x1650.jpg", "CART": "https://images.migrosone.com/sanalmarket/product/11010208/11010208_1-2ec412-46x46.jpg"}, "productId": 20000011010208}], "energyImages": [], "prettyName": "sutas-latte-1-l-p-a800a0", "productInstallmentInfo": {"installmentApplicable": false, "maxInstallmentCount": 1, "installmentDescription": "<p><strong>Ödeme ve Taksit Seçenekleri Hakkında</strong><br>Sepetinizde taksit seçeneği birbirinden farklı ürünlerin yer alması halinde, uygulanabilecek taksit sayısı, taksit seçeneği en düşük olan ürün baz alınarak belirlenir.<br>Taksit ve vade farkı uygulamalarında tek taraflı değişiklik yapılması hakkı saklıdır.</p>"}, "productOptionInfos": [], "propertyInfosMap": {"OTHER": [{"id": 20000000000487, "type": "OTHER", "name": "Gıda", "priority": 1, "customId": "foodProperty", "value": "E"}], "LEGAL": [{"id": 20000000000420, "type": "LEGAL", "name": "Kurye İçin Ağırlık", "priority": 3, "customId": "courier_weight", "value": "1085"}, {"id": 20000000000372, "type": "LEGAL", "name": "İşletmeci / Üretici / İthalatçı / Dağıtıcı Adresi", "priority": 10, "customId": "productSupplierAddress", "value": "ULUABAT KÖYÜ . KARACABEY BURSA"}], "MAIN": [{"id": 20000000000054, "type": "MAIN", "name": "İçindekiler", "priority": 1, "value": "%3 yağlı pastörize inek sütü (%80), su,şeker,kahve(%1,1),kahve aroma vericisi, kıvam arttırıcı (karboksi metil selüloz, karragenan) asitlik düzenleyici (potasyum fosfat). En az %2,4 süt yağı içerir."}, {"id": 20000000000055, "type": "MAIN", "name": "Alerjen Uyarısı", "priority": 2, "value": "inek sütü"}, {"id": 20000000000056, "type": "MAIN", "name": "Net Miktar (g/ml)", "priority": 3, "customId": "netKg", "value": "1000"}, {"id": 20000000000058, "type": "MAIN", "name": "Saklama Koşulları", "priority": 4, "value": "0-4 °C muhafaza ediniz"}, {"id": 20000000000057, "type": "MAIN", "name": "Menşei", "priority": 5, "customId": "country", "value": "TÜRKİYE"}, {"id": 20000000000059, "type": "MAIN", "name": "İşletmeci / Üretici / İthalatçı / Dağıtıcı", "priority": 7, "customId": "productSupplier", "value": "SÜTAŞ SÜT ÜRÜNLERİ A.Ş."}, {"id": 20000000000289, "type": "MAIN", "name": "İşletmeci / Üretici / İthalatçı / Dağıtıcı Numarası", "priority": 8, "customId": "productSupplierId", "value": "020091"}, {"id": 20000000000060, "type": "MAIN", "name": "Kullanım Önerileri", "priority": 11, "value": "Ambalajdaki son tüketim tarihinden (STT) önce tüketiniz. İçmeden önce çalkalayınız. Ambalaj açıldıktan sonra buzdolabında saklanmalı ve 2 gün içinde tüketilmelidir."}], "NUTRITIONAL": [{"id": 20000000000029, "type": "NUTRITIONAL", "name": "Enerji (kcal)", "priority": 1, "customId": "energyKcal", "value": "64.0"}, {"id": 20000000000065, "type": "NUTRITIONAL", "name": "Enerji (kJ)", "priority": 2, "customId": "energyKj", "value": "266.0"}, {"id": 20000000000030, "type": "NUTRITIONAL", "name": "Yağ (g)", "priority": 3, "customId": "fat", "value": "2.4"}, {"id": 20000000000031, "type": "NUTRITIONAL", "name": "Doymuş yağ (g)", "priority": 4, "customId": "saturatedFat", "value": "1.6"}, {"id": 20000000000033, "type": "NUTRITIONAL", "name": "Karbonhidrat (g)", "priority": 9, "customId": "carbohydrate", "value": "8.2"}, {"id": 20000000000034, "type": "NUTRITIONAL", "name": "Şeker (g)", "priority": 10, "customId": "glucose", "value": "8.2"}, {"id": 20000000000036, "type": "NUTRITIONAL", "name": "Protein (g)", "priority": 14, "customId": "protein", "value": "2.3"}, {"id": 20000000000038, "type": "NUTRITIONAL", "name": "Tuz (g)", "priority": 15, "customId": "salt", "value": "0.1"}]}, "specialDietTags": [], "crmDiscountTags": [], "attributeTags": [], "status": "IN_SALE", "saleable": true, "unit": "PIECE", "initialIncrementAmount": 1, "incrementAmount": 1, "maxAmount": 8, "maxAmountDescription": "Bu üründen en fazla 8 adet sipariş verilebilir. Belirtilen adet üzerindeki siparişlerin iptal edilmesi hakkı saklıdır.", "unitAmount": 1, "regularPrice": 18900, "salePrice": 18900, "loyaltyPrice": 18900, "shownPrice": 18900, "discountRate": 0, "discounts": {}, "discountDescriptions": [], "badges": [], "storePortfolio": "MARKET", "referrerEventId": "1794049551121332659", "sponsored": true, "productNoteAppendable": false, "buyNowApplicable": false, "advertisementInfo": {"adUnitName": "migros-sanalmarket-sponsored-product-1", "creativeId": 14836, "lineItemId": 12760, "keyword": "sut", "payload": "Lx5vdxgHjY0CYrqIA127+27uN6vN83WlLD3g2e7M4vmVEOc96A5J9Io4hDYgvNF5R9n7ORE5VXGNT8gfh1JTLZrZ48fJrvM9TBkdjQfRw50yxRpZL+j6tJ6QDwG8zWgsDO7FjT7S+DCPhEzlI476DcNsjCxAX6Di2Ecw70D9ptA="}, "productSafetyInfo": {"productSupplierInfo": {"supplierDetails": [{"name": "İşletmeci / Üretici / İthalatçı / Dağıtıcı", "value": "SÜTAŞ SÜT ÜRÜNLERİ A.Ş."}, {"name": "İşletmeci / Üretici / İthalatçı / Dağıtıcı Numarası", "value": "020091"}, {"name": "İşletmeci / Üretici / İthalatçı / Dağıtıcı Adresi", "value": "ULUABAT KÖYÜ . KARACABEY BURSA"}]}, "productSafetyImageInfo": {"images": [{"urls": {"LEGAL": "https://images.migrosone.com/sanalmarket/product-legal/11010208/11010208_bicakizi-026086.jpg"}, "productId": 20000011010208}]}}, "insuranceProductDetails": [], "groupBadgeMap": {}, "sellerInfo": {"sellerId": 20, "sellerName": "Migros Sanal Market"}, "analytics": {"seller_type": "INTERNAL", "store_id": 20000000000607, "seller_id": 20, "seller_name": "Migros Sanal Market", "store_name": "BEYLİKDÜZÜ 5M MİGROS"}, "sortedProperties": {}, "generalInformation": "Ürünün stok, fiyat ve kampanya bilgisi, teslimatı gerçekleştirecek mağazanın stok, fiyat ve kampanya bilgilerine göre belirlenmektedir.", "properties": {}}, {"id": 20000011011520, "storeId": 20000000000607, "storeGroupId": 1, "warehouseId": 607, "sku": "11011520", "name": "Migros %3 Yağlı Uht Süt 1 L", "description": "<p><strong>İçindekiler</strong><br>%3 yağlı inek sütü (laktoz içerir)</p><p><strong>Alerjen Uyarısı</strong><br>Laktoz içerir.</p><p><strong>Net Miktar (g/ml)</strong><br>1000</p><p><strong>Saklama Koşulları</strong><br>3</p><p><strong>Menşei</strong><br>TÜRKİYE</p><p><strong>İşletme Kayıt No</strong><br>54-0037</p><p><strong>Kullanım Önerileri</strong><br>UHT yöntemiyle üretilmistir. Homojenize edildiginden yagı üzerinde birikmez. Kaynatmaya gerek yoktur.</p><p><strong>Ürün Bilgilerini Kullanma Hakkında</strong><br>İnternet sitemizde ve online satış kanallarımızda yer alan ürün etiket bilgileri, ürünün tedarikçisi tarafından Migros Ticaret A.Ş.’ye iletilen en güncel bilgilerdir. Ürün etiket bilgileri ile internet sitemiz ve online satış kanallarımızda bulunan bilgiler arasında herhangi bir farklılık bulunması halinde sorumluluk tamamen tedarikçi firmaya aittir.</p>", "shortDescription": "", "information": "<p><strong>İçindekiler</strong><br>%3 yağlı inek sütü (laktoz içerir)</p><p><strong>Alerjen Uyarısı</strong><br>Laktoz içerir.</p><p><strong>Net Miktar (g/ml)</strong><br>1000</p><p><strong>Saklama Koşulları</strong><br>3</p><p><strong>Menşei</strong><br>TÜRKİYE</p><p><strong>İşletme Kayıt No</strong><br>54-0037</p><p><strong>Kullanım Önerileri</strong><br>UHT yöntemiyle üretilmistir. Homojenize edildiginden yagı üzerinde birikmez. Kaynatmaya gerek yoktur.</p>", "propertyLegalText": "<p><strong>Ürün Bilgilerini Kullanma Hakkında</strong><br>İnternet sitemizde ve online satış kanallarımızda yer alan ürün etiket bilgileri, ürünün tedarikçisi tarafından Migros Ticaret A.Ş.’ye iletilen en güncel bilgilerdir. Ürün etiket bilgileri ile internet sitemiz ve online satış kanallarımızda bulunan bilgiler arasında herhangi bir farklılık bulunması halinde sorumluluk tamamen tedarikçi firmaya aittir.</p>", "returnPolicy": "<div class=\"form-area return-policy-area\">\n <div class=\"in\">\n <p><strong>İade Sürecini Nasıl Başlatabilirim?</strong></p>\n <p>Migros uygulamasından aldığınız ürünler için <strong>14 gün</strong> gün içinde cayma hakkınızı\n kullanabilirsiniz. Bunun dışında, <strong>30 gün</strong>\n içinde ilettiğiniz iade talepleri için müşteri memnuniyeti politikalarımız kapsamında iade talepleriniz\n değerlendirilecektir. İade sürecini 0850 200 40 00 telefon numarası üzerinden başlatabilirsiniz.</p>\n <p><strong>İade Koşulları:</strong></p>\n <p>Her türlü iadeler mutlak suretle orjinal kutu ve ürünün ambalajı (koruma bandı) bozulmaksızın yapılmalıdır.</p>\n <p>Ürün fatura aslınının iade/değişim bildirimi ile birlikte gönderilmesi gerekmektedir.</p>\n <p></p>\n <p>Elektronik ürünler ve cep telefonları yetkili servis garantisinde bulunmaktadır. Üründe yaşanan sorun ya da\n ayıplı mal yetkili servis tarafından belgelendikten sonra tarafımızca tüm aksesuarları ile birlikte iade olarak\n kabul edilmektedir. Cep telefonları ürünlerinde kutu içerisindeki garanti belgesinin kaşelenmesi için ürünün\n kutusu açılmakta ve orjinal ambalajı açık şekilde teslim edilmektedir.\n </p>\n <p></p>\n <p>Kurulum gerektiren elektronik ürünler yetkili servis çalışanları tarafından açıldıktan sonra, herhangi bir\n hasar/kusur/ayıp tespit edilmesi halinde tespit tutanağı doldurtulması gerekir. Tespit tutanağı olmayan veya\n yetkili servis kontrolü dışında açılmış olan ürünler için iade/değişim işlemi gerçekleştirilemez.</p>\n <p></p>\n <p>Kargo belgesi ile teslim edilen ürünler kargo görevlisi huzurunda açılmalıdır. Ürünün dış ambalajında hiç bir\n hasar, açıklık, darbe, ıslaklık vb. olmaması, buna rağmen ürünün hasarlı çıkması durumunda, mevcut durum bir\n tutanakla karşılıklı olarak imza altına alınmalıdır. Kargo görevlisi tutanağın 1 nüshasını müşteriye vermekle\n yükümlüdür. Ürün hasar tespit tutanağının ve fatura aslının iade/değişim bildirimi ile birlikte gönderilmesi\n gerekmektedir.</p>\n <p><strong>Cayma Hakkının Geçerli Olmadığı Durumlar</strong></p>\n <ul>\n <li>Fiyatı finansal piyasalardaki dalgalanmalara bağlı olarak değişen ve satıcının kontrolünde olmayan ürün veya\n hizmetler iade/değişim kapsamında değerlendirilmemektedir.\n </li>\n <li>Kişisel istekler doğrultusunda size özel olarak üretilen veya üzerinde değişiklik yapılan ürünler iade/değişim\n kapsamında degerlendirilmemektedir.\n </li>\n <li>Çabuk bozulabilen veya son kullanma tarihi geçebilecek ürünler iade/değişim kapsamında\n değerlendirilmemektedir.\n </li>\n <li>Sağlık veya hijyen açısından iadesi uygun olmayıp, tesliminden sonra ambalaj, bant, mühür, paket gibi koruyucu\n unsurları açılmış olan ürünler iade/değişim kapsamında değerlendirilmemektedir. (İç giyim, mayo, bikini, kişisel\n bakım, kozmetik ürünleri vb.)\n </li>\n <li>Tesliminden sonra başka ürünlerle karışan ve doğası gereği ayrıştırılması mümkün olmayan ürünler iade/değişim\n kapsamında değerlendirilmemektedir.\n </li>\n <li>Ürünün tesliminden sonra ambalajın açılmış olması halinde maddi ortamda sunulan kitap, dijital içerik ve\n bilgisayar sarf malzemeleri iade/değişim kapsamında değerlendirilmemektedir.\n </li>\n <li>Abonelik sözleşmesi kapsamında sağlananlar dışında, gazete, dergi gibi süreli yayınlar iade/değişim kapsamında\n değerlendirilmemektedir.\n </li>\n <li>Belirli bir tarihte veya dönemde yapılması gereken, konaklama, eşya taşıma, araba kiralama, yiyecek- içecek\n tedariki ve boş zamanın değerlendirilmesine ilişkin ürünler iade/değişim kapsamında değerlendirilmemektedir.\n </li>\n <li>Elektronik ortamda anında ifa edilen hizmetler veya anında teslim edilen gayrimaddi ürünler iade/değişim\n kapsamında değerlendirilmemektedir.\n </li>\n <li>Yiyecek ve içecek gibi günlük tüketim maddelerinin, satıcının düzenli teslimatları çerçevesinde tüketicinin\n meskenine veya işyerine gönderilmesi iade/değişim kapsamında değerlendirilmemektedir.\n </li>\n <li>Karayolları Trafik Yönetmeliği kapsamında tescile tabi taşıt niteliğinde olan tiny house, karavan vb.\n ürünler iade/değişim kapsamında değerlendirilmemektedir.\n </li>\n </ul>\n </div>\n</div>\n", "brandId": 425, "brand": {"name": "Migros", "id": 425, "prettyName": "migros-b-1a9"}, "categoryId": 18000000075684, "category": {"name": "Uzun Ömürlü Süt", "id": 18000000075684, "prettyName": "uzun-omurlu-sut-c-127a4"}, "categoryAscendants": [{"name": "Süt", "id": 18000000075058, "prettyName": "sut-c-12532"}, {"name": "Süt, Şarküteri, Kahvaltılık", "id": 18000000074924, "prettyName": "sut-sarkuteri-kahvaltilik-c-124ac"}], "shadowCategoryId": 20000000001034, "shadowCategory": {"name": "Uzun Ömürlü Süt", "id": 20000000001034, "prettyName": "uzun-omurlu-sut-c-40a"}, "shadowCategoryAscendants": [{"name": "Süt", "id": 20000000000108, "prettyName": "sut-c-6c"}, {"name": "Süt, Kahvaltılık", "id": 20000000000004, "prettyName": "sut-kahvaltilik-c-4"}], "categoriesForSorting": [{"name": "Uzun Ömürlü Süt", "id": 18000000075684, "prettyName": "uzun-omurlu-sut-c-127a4"}, {"name": "Süt", "id": 18000000075058, "prettyName": "sut-c-12532"}, {"name": "Süt, Şarküteri, Kahvaltılık", "id": 18000000074924, "prettyName": "sut-sarkuteri-kahvaltilik-c-124ac"}], "lists": [{"name": "Evde Labne Yapımı", "id": 20000196889492, "prettyName": "evde-labne-yapimi-l-bbc4b94"}, {"name": "Crema Catalana", "id": 20000196898116, "prettyName": "crema-catalana-l-bbc6d44"}, {"name": "etsiz köfte", "id": 20000196894587, "prettyName": "etsiz-kofte-l-bbc5f7b"}, {"name": "Spoonful", "id": 20000196895620, "prettyName": "spoonful-l-bbc6384"}, {"name": "Milföyden Portekiz Tatlısı", "id": 20000196897284, "prettyName": "milfoyden-portekiz-tatlisi-l-bbc6a04"}, {"name": "Krepli Sultan Kebabı", "id": 20000196894671, "prettyName": "krepli-sultan-kebabi-l-bbc5fcf"}, {"name": "algida güllaç kap", "id": 20000196894420, "prettyName": "algida-gullac-kap-l-bbc5ed4"}, {"name": "ıspanaklı kek", "id": 20000196894855, "prettyName": "ispanakli-kek-l-bbc6087"}, {"name": "Sebzeli Muffin Tarifi", "id": 20000196888411, "prettyName": "sebzeli-muffin-tarifi-l-bbc475b"}, {"name": "Fit Banana Bread", "id": 20000196895611, "prettyName": "fit-banana-bread-l-bbc637b"}, {"name": "buzluk börek", "id": 20000196894227, "prettyName": "buzluk-borek-l-bbc5e13"}, {"name": "Eduscho ile Latte Tarifleri", "id": 20000196889984, "prettyName": "eduscho-ile-latte-tarifleri-l-bbc4d80"}, {"name": "Tavada Pizza Tarifi", "id": 20000196888415, "prettyName": "tavada-pizza-tarifi-l-bbc475f"}, {"name": "Kahvaltlılık Muffin Tarifi", "id": 20000196888443, "prettyName": "kahvaltlilik-muffin-tarifi-l-bbc477b"}, {"name": "Cokokrem alısveris", "id": 20000196894207, "prettyName": "cokokrem-alisveris-l-bbc5dff"}, {"name": "Pınar Tarif", "id": 20000196894507, "prettyName": "pinar-tarif-l-bbc5f2b"}, {"name": "Chai Latte Yapımı", "id": 20000196890123, "prettyName": "chai-latte-yapimi-l-bbc4e0b"}, {"name": "Kahvaltı 🥛🧀🥚", "id": 20000196920549, "prettyName": "kahvalti-l-bbcc4e5"}, {"name": "Panna Cotta Malzemeleri", "id": 20000196886732, "prettyName": "panna-cotta-malzemeleri-l-bbc40cc"}, {"name": "Çamlıca Tarif", "id": 20000196894411, "prettyName": "camlica-tarif-l-bbc5ecb"}, {"name": "Fırında Fransız Tostu", "id": 20000196886077, "prettyName": "firinda-fransiz-tostu-l-bbc3e3d"}, {"name": "pepsi tarif", "id": 20000196894562, "prettyName": "pepsi-tarif-l-bbc5f62"}, {"name": "B2 Vitamini alışveriş listesi", "id": 20000196888318, "prettyName": "b2-vitamini-alisveris-listesi-l-bbc46fe"}, {"name": "B2 Kaynağı Ürünler", "id": 20000196894747, "prettyName": "b2-kaynagi-urunler-l-bbc601b"}, {"name": "B12 Vitamini", "id": 20000196890202, "prettyName": "b12-vitamini-l-bbc4e5a"}, {"name": "B2 Vitamini", "id": 20000196890190, "prettyName": "b2-vitamini-l-bbc4e4e"}, {"name": "b2 kaynağı ürünler ", "id": 20000196892853, "prettyName": "b2-kaynagi-urunler-l-bbc58b5"}], "images": [{"urls": {"PRODUCT_LIST": "https://images.migrosone.com/sanalmarket/product/11011520/11011520-0da5c0-105x105.jpg", "PRODUCT_DETAIL": "https://images.migrosone.com/sanalmarket/product/11011520/11011520-0da5c0.jpg", "PRODUCT_HD": "https://images.migrosone.com/sanalmarket/product/11011520/11011520-0da5c0-1650x1650.jpg", "CART": "https://images.migrosone.com/sanalmarket/product/11011520/11011520-0da5c0-46x46.jpg"}, "productId": 20000011011520}, {"urls": {"PRODUCT_LIST": "https://images.migrosone.com/sanalmarket/product/11011520/11011520_yan-0a8a11-105x105.jpg", "PRODUCT_DETAIL": "https://images.migrosone.com/sanalmarket/product/11011520/11011520_yan-0a8a11.jpg", "PRODUCT_HD": "https://images.migrosone.com/sanalmarket/product/11011520/11011520_yan-0a8a11-1650x1650.jpg", "CART": "https://images.migrosone.com/sanalmarket/product/11011520/11011520_yan-0a8a11-46x46.jpg"}, "productId": 20000011011520}], "energyImages": [], "prettyName": "migros-3-yagli-uht-sut-1-l-p-a805c0", "productInstallmentInfo": {"installmentApplicable": false, "maxInstallmentCount": 1, "installmentDescription": "<p><strong>Ödeme ve Taksit Seçenekleri Hakkında</strong><br>Sepetinizde taksit seçeneği birbirinden farklı ürünlerin yer alması halinde, uygulanabilecek taksit sayısı, taksit seçeneği en düşük olan ürün baz alınarak belirlenir.<br>Taksit ve vade farkı uygulamalarında tek taraflı değişiklik yapılması hakkı saklıdır.</p>"}, "productOptionInfos": [], "propertyInfosMap": {"OTHER": [{"id": 20000000000487, "type": "OTHER", "name": "Gıda", "priority": 1, "customId": "foodProperty", "value": "E"}], "SEARCH_SEGMENT": [{"id": 20000000000154, "type": "SEARCH_SEGMENT", "name": "000", "priority": 0, "value": "0.8101872252000001"}, {"id": 20000000000153, "type": "SEARCH_SEGMENT", "name": "001", "priority": 0, "value": "0.6454204886"}, {"id": 20000000000152, "type": "SEARCH_SEGMENT", "name": "010", "priority": 0, "value": "0.4427493905"}, {"id": 20000000000150, "type": "SEARCH_SEGMENT", "name": "011", "priority": 0, "value": "1.8766669558"}, {"id": 20000000000151, "type": "SEARCH_SEGMENT", "name": "100", "priority": 0, "value": "1.5398312185"}, {"id": 20000000000147, "type": "SEARCH_SEGMENT", "name": "101", "priority": 0, "value": "1.3935494876000003"}, {"id": 20000000000149, "type": "SEARCH_SEGMENT", "name": "110", "priority": 0, "value": "1.3177495672000001"}, {"id": 20000000000148, "type": "SEARCH_SEGMENT", "name": "111", "priority": 0, "value": "6.705677574999999"}], "LEGAL": [{"id": 20000000000420, "type": "LEGAL", "name": "Kurye İçin Ağırlık", "priority": 3, "customId": "courier_weight", "value": "1000"}, {"id": 20000000000372, "type": "LEGAL", "name": "İşletmeci / Üretici / İthalatçı / Dağıtıcı Adresi", "priority": 10, "customId": "productSupplierAddress", "value": "ALTAYÇEŞME MH. ÇAMLI SK. NO:21 MALTEPE İSTANBUL"}], "MAIN": [{"id": 20000000000054, "type": "MAIN", "name": "İçindekiler", "priority": 1, "value": "%3 yağlı inek sütü (laktoz içerir)"}, {"id": 20000000000055, "type": "MAIN", "name": "Alerjen Uyarısı", "priority": 2, "value": "Laktoz içerir."}, {"id": 20000000000056, "type": "MAIN", "name": "Net Miktar (g/ml)", "priority": 3, "customId": "netKg", "value": "1000"}, {"id": 20000000000058, "type": "MAIN", "name": "Saklama Koşulları", "priority": 4, "value": "3"}, {"id": 20000000000057, "type": "MAIN", "name": "Menşei", "priority": 5, "customId": "country", "value": "TÜRKİYE"}, {"id": 20000000000061, "type": "MAIN", "name": "İşletme Kayıt No", "priority": 6, "customId": "productionPermitCertNo", "value": "54-0037"}, {"id": 20000000000059, "type": "MAIN", "name": "İşletmeci / Üretici / İthalatçı / Dağıtıcı", "priority": 7, "customId": "productSupplier", "value": "AK GIDA SAN.VE TİC.A.Ş."}, {"id": 20000000000289, "type": "MAIN", "name": "İşletmeci / Üretici / İthalatçı / Dağıtıcı Numarası", "priority": 8, "customId": "productSupplierId", "value": "029659"}, {"id": 20000000000060, "type": "MAIN", "name": "Kullanım Önerileri", "priority": 11, "value": "UHT yöntemiyle üretilmistir. Homojenize edildiginden yagı üzerinde birikmez. Kaynatmaya gerek yoktur."}], "PL": [{"id": 20000000000189, "type": "PL", "name": "PL", "priority": 1, "customId": "pl", "value": "E"}], "NUTRITIONAL": [{"id": 20000000000029, "type": "NUTRITIONAL", "name": "Enerji (kcal)", "priority": 1, "customId": "energyKcal", "value": "59.0"}, {"id": 20000000000065, "type": "NUTRITIONAL", "name": "Enerji (kJ)", "priority": 2, "customId": "energyKj", "value": "246.0"}, {"id": 20000000000030, "type": "NUTRITIONAL", "name": "Yağ (g)", "priority": 3, "customId": "fat", "value": "3.1"}, {"id": 20000000000031, "type": "NUTRITIONAL", "name": "Doymuş yağ (g)", "priority": 4, "customId": "saturatedFat", "value": "2.0"}, {"id": 20000000000033, "type": "NUTRITIONAL", "name": "Karbonhidrat (g)", "priority": 9, "customId": "carbohydrate", "value": "4.7"}, {"id": 20000000000034, "type": "NUTRITIONAL", "name": "Şeker (g)", "priority": 10, "customId": "glucose", "value": "4.7"}, {"id": 20000000000036, "type": "NUTRITIONAL", "name": "Protein (g)", "priority": 14, "customId": "protein", "value": "3.0"}, {"id": 20000000000038, "type": "NUTRITIONAL", "name": "Tuz (g)", "priority": 15, "customId": "salt", "value": "0.1"}]}, "specialDietTags": [], "crmDiscountTags": [], "attributeTags": [], "status": "IN_SALE", "saleable": true, "unit": "PIECE", "initialIncrementAmount": 1, "incrementAmount": 1, "maxAmount": 8, "maxAmountDescription": "Bu üründen en fazla 8 adet sipariş verilebilir. Belirtilen adet üzerindeki siparişlerin iptal edilmesi hakkı saklıdır.", "unitAmount": 1, "regularPrice": 5275, "salePrice": 5275, "loyaltyPrice": 5275, "shownPrice": 5275, "discountRate": 0, "discounts": {}, "discountDescriptions": [], "badges": [], "storePortfolio": "MARKET", "referrerEventId": "1794049551121332659", "sponsored": false, "productNoteAppendable": false, "buyNowApplicable": false, "productSafetyInfo": {"productSupplierInfo": {"supplierDetails": [{"name": "İşletmeci / Üretici / İthalatçı / Dağıtıcı", "value": "AK GIDA SAN.VE TİC.A.Ş."}, {"name": "İşletmeci / Üretici / İthalatçı / Dağıtıcı Numarası", "value": "029659"}, {"name": "İşletmeci / Üretici / İthalatçı / Dağıtıcı Adresi", "value": "ALTAYÇEŞME MH. ÇAMLI SK. NO:21 MALTEPE İSTANBUL"}]}, "productSafetyImageInfo": {"images": [{"urls": {"LEGAL": "https://images.migrosone.com/sanalmarket/product-legal/11011520/11011520_bicakizi-6a09f0.jpg"}, "productId": 20000011011520}]}}, "insuranceProductDetails": [], "groupBadgeMap": {}, "socialProofInfo": {"socialProofPriority": 1, "categoryId": 18000000075684, "categoryName": "Uzun Ömürlü Süt", "description": "Uzun Ömürlü Süt kategorisinin en çok satan 1. ürünüdür"}, "sellerInfo": {"sellerId": 20, "sellerName": "Migros Sanal Market"}, "analytics": {"seller_type": "INTERNAL", "store_id": 20000000000607, "seller_id": 20, "seller_name": "Migros Sanal Market", "store_name": "BEYLİKDÜZÜ 5M MİGROS"}, "sortedProperties": {}, "generalInformation": "Ürünün stok, fiyat ve kampanya bilgisi, teslimatı gerçekleştirecek mağazanın stok, fiyat ve kampanya bilgilerine göre belirlenmektedir.", "properties": {}}, {"id": 20000011019904, "storeId": 20000000000607, "storeGroupId": 1, "warehouseId": 607, "sku": "11019904", "name": "Torku Uht Süt 1 L", "description": "<p><strong>İçindekiler</strong><br>% 3,3 yağlı inek sütü (hayvansal)</p><p><strong>Alerjen Uyarısı</strong><br>Süt içerir.</p><p><strong>Net Miktar (g/ml)</strong><br>1000</p><p><strong>Saklama Koşulları</strong><br>Serin ve Kuru Yerde Muhafaza Ediniz</p><p><strong>Menşei</strong><br>TÜRKİYE</p><p><strong>İşletme Kayıt No</strong><br>TR 42-0104</p><p><strong>Kullanım Önerileri</strong><br>Son tüketim tarihine kadar tüketilmelidir. Açıldıktan sonra buzdolabında muhafaza edip 2 gün içinde tüketiniz.</p><p><strong>Ürün Bilgilerini Kullanma Hakkında</strong><br>İnternet sitemizde ve online satış kanallarımızda yer alan ürün etiket bilgileri, ürünün tedarikçisi tarafından Migros Ticaret A.Ş.’ye iletilen en güncel bilgilerdir. Ürün etiket bilgileri ile internet sitemiz ve online satış kanallarımızda bulunan bilgiler arasında herhangi bir farklılık bulunması halinde sorumluluk tamamen tedarikçi firmaya aittir.</p>", "shortDescription": "", "information": "<p><strong>İçindekiler</strong><br>% 3,3 yağlı inek sütü (hayvansal)</p><p><strong>Alerjen Uyarısı</strong><br>Süt içerir.</p><p><strong>Net Miktar (g/ml)</strong><br>1000</p><p><strong>Saklama Koşulları</strong><br>Serin ve Kuru Yerde Muhafaza Ediniz</p><p><strong>Menşei</strong><br>TÜRKİYE</p><p><strong>İşletme Kayıt No</strong><br>TR 42-0104</p><p><strong>Kullanım Önerileri</strong><br>Son tüketim tarihine kadar tüketilmelidir. Açıldıktan sonra buzdolabında muhafaza edip 2 gün içinde tüketiniz.</p>", "propertyLegalText": "<p><strong>Ürün Bilgilerini Kullanma Hakkında</strong><br>İnternet sitemizde ve online satış kanallarımızda yer alan ürün etiket bilgileri, ürünün tedarikçisi tarafından Migros Ticaret A.Ş.’ye iletilen en güncel bilgilerdir. Ürün etiket bilgileri ile internet sitemiz ve online satış kanallarımızda bulunan bilgiler arasında herhangi bir farklılık bulunması halinde sorumluluk tamamen tedarikçi firmaya aittir.</p>", "returnPolicy": "<div class=\"form-area return-policy-area\">\n <div class=\"in\">\n <p><strong>İade Sürecini Nasıl Başlatabilirim?</strong></p>\n <p>Migros uygulamasından aldığınız ürünler için <strong>14 gün</strong> gün içinde cayma hakkınızı\n kullanabilirsiniz. Bunun dışında, <strong>30 gün</strong>\n içinde ilettiğiniz iade talepleri için müşteri memnuniyeti politikalarımız kapsamında iade talepleriniz\n değerlendirilecektir. İade sürecini 0850 200 40 00 telefon numarası üzerinden başlatabilirsiniz.</p>\n <p><strong>İade Koşulları:</strong></p>\n <p>Her türlü iadeler mutlak suretle orjinal kutu ve ürünün ambalajı (koruma bandı) bozulmaksızın yapılmalıdır.</p>\n <p>Ürün fatura aslınının iade/değişim bildirimi ile birlikte gönderilmesi gerekmektedir.</p>\n <p></p>\n <p>Elektronik ürünler ve cep telefonları yetkili servis garantisinde bulunmaktadır. Üründe yaşanan sorun ya da\n ayıplı mal yetkili servis tarafından belgelendikten sonra tarafımızca tüm aksesuarları ile birlikte iade olarak\n kabul edilmektedir. Cep telefonları ürünlerinde kutu içerisindeki garanti belgesinin kaşelenmesi için ürünün\n kutusu açılmakta ve orjinal ambalajı açık şekilde teslim edilmektedir.\n </p>\n <p></p>\n <p>Kurulum gerektiren elektronik ürünler yetkili servis çalışanları tarafından açıldıktan sonra, herhangi bir\n hasar/kusur/ayıp tespit edilmesi halinde tespit tutanağı doldurtulması gerekir. Tespit tutanağı olmayan veya\n yetkili servis kontrolü dışında açılmış olan ürünler için iade/değişim işlemi gerçekleştirilemez.</p>\n <p></p>\n <p>Kargo belgesi ile teslim edilen ürünler kargo görevlisi huzurunda açılmalıdır. Ürünün dış ambalajında hiç bir\n hasar, açıklık, darbe, ıslaklık vb. olmaması, buna rağmen ürünün hasarlı çıkması durumunda, mevcut durum bir\n tutanakla karşılıklı olarak imza altına alınmalıdır. Kargo görevlisi tutanağın 1 nüshasını müşteriye vermekle\n yükümlüdür. Ürün hasar tespit tutanağının ve fatura aslının iade/değişim bildirimi ile birlikte gönderilmesi\n gerekmektedir.</p>\n <p><strong>Cayma Hakkının Geçerli Olmadığı Durumlar</strong></p>\n <ul>\n <li>Fiyatı finansal piyasalardaki dalgalanmalara bağlı olarak değişen ve satıcının kontrolünde olmayan ürün veya\n hizmetler iade/değişim kapsamında değerlendirilmemektedir.\n </li>\n <li>Kişisel istekler doğrultusunda size özel olarak üretilen veya üzerinde değişiklik yapılan ürünler iade/değişim\n kapsamında degerlendirilmemektedir.\n </li>\n <li>Çabuk bozulabilen veya son kullanma tarihi geçebilecek ürünler iade/değişim kapsamında\n değerlendirilmemektedir.\n </li>\n <li>Sağlık veya hijyen açısından iadesi uygun olmayıp, tesliminden sonra ambalaj, bant, mühür, paket gibi koruyucu\n unsurları açılmış olan ürünler iade/değişim kapsamında değerlendirilmemektedir. (İç giyim, mayo, bikini, kişisel\n bakım, kozmetik ürünleri vb.)\n </li>\n <li>Tesliminden sonra başka ürünlerle karışan ve doğası gereği ayrıştırılması mümkün olmayan ürünler iade/değişim\n kapsamında değerlendirilmemektedir.\n </li>\n <li>Ürünün tesliminden sonra ambalajın açılmış olması halinde maddi ortamda sunulan kitap, dijital içerik ve\n bilgisayar sarf malzemeleri iade/değişim kapsamında değerlendirilmemektedir.\n </li>\n <li>Abonelik sözleşmesi kapsamında sağlananlar dışında, gazete, dergi gibi süreli yayınlar iade/değişim kapsamında\n değerlendirilmemektedir.\n </li>\n <li>Belirli bir tarihte veya dönemde yapılması gereken, konaklama, eşya taşıma, araba kiralama, yiyecek- içecek\n tedariki ve boş zamanın değerlendirilmesine ilişkin ürünler iade/değişim kapsamında değerlendirilmemektedir.\n </li>\n <li>Elektronik ortamda anında ifa edilen hizmetler veya anında teslim edilen gayrimaddi ürünler iade/değişim\n kapsamında değerlendirilmemektedir.\n </li>\n <li>Yiyecek ve içecek gibi günlük tüketim maddelerinin, satıcının düzenli teslimatları çerçevesinde tüketicinin\n meskenine veya işyerine gönderilmesi iade/değişim kapsamında değerlendirilmemektedir.\n </li>\n <li>Karayolları Trafik Yönetmeliği kapsamında tescile tabi taşıt niteliğinde olan tiny house, karavan vb.\n ürünler iade/değişim kapsamında değerlendirilmemektedir.\n </li>\n </ul>\n </div>\n</div>\n", "brandId": 434, "brand": {"name": "Torku", "id": 434, "prettyName": "torku-b-1b2"}, "categoryId": 18000000075684, "category": {"name": "Uzun Ömürlü Süt", "id": 18000000075684, "prettyName": "uzun-omurlu-sut-c-127a4"}, "categoryAscendants": [{"name": "Süt", "id": 18000000075058, "prettyName": "sut-c-12532"}, {"name": "Süt, Şarküteri, Kahvaltılık", "id": 18000000074924, "prettyName": "sut-sarkuteri-kahvaltilik-c-124ac"}], "shadowCategoryId": 20000000001034, "shadowCategory": {"name": "Uzun Ömürlü Süt", "id": 20000000001034, "prettyName": "uzun-omurlu-sut-c-40a"}, "shadowCategoryAscendants": [{"name": "Süt", "id": 20000000000108, "prettyName": "sut-c-6c"}, {"name": "Süt, Kahvaltılık", "id": 20000000000004, "prettyName": "sut-kahvaltilik-c-4"}], "categoriesForSorting": [{"name": "Uzun Ömürlü Süt", "id": 18000000075684, "prettyName": "uzun-omurlu-sut-c-127a4"}, {"name": "Süt", "id": 18000000075058, "prettyName": "sut-c-12532"}, {"name": "Süt, Şarküteri, Kahvaltılık", "id": 18000000074924, "prettyName": "sut-sarkuteri-kahvaltilik-c-124ac"}], "lists": [{"name": "KİPA Ürünleri!", "id": 20000196923076, "prettyName": "kipa-urunleri-l-bbccec4"}, {"name": "Seç Al Fırsatları", "id": 20000196922852, "prettyName": "sec-al-firsatlari-l-bbccde4"}, {"name": "Seç Al Fırsatları", "id": 20000196922853, "prettyName": "sec-al-firsatlari-l-bbccde5"}, {"name": "Seç Al Fırsatları", "id": 20000196922890, "prettyName": "sec-al-firsatlari-l-bbcce0a"}, {"name": "Seç Al Fırsatları", "id": 20000196922892, "prettyName": "sec-al-firsatlari-l-bbcce0c"}, {"name": "Seç Al Fırsatları", "id": 20000196922893, "prettyName": "sec-al-firsatlari-l-bbcce0d"}, {"name": "Kahvaltı 🥛🧀🥚", "id": 20000196920549, "prettyName": "kahvalti-l-bbcc4e5"}, {"name": "torku tüm ürünler", "id": 20000196893883, "prettyName": "torku-tum-urunler-l-bbc5cbb"}, {"name": "b2 kaynağı ürünler ", "id": 20000196892853, "prettyName": "b2-kaynagi-urunler-l-bbc58b5"}, {"name": "B2 Kaynağı Ürünler", "id": 20000196894747, "prettyName": "b2-kaynagi-urunler-l-bbc601b"}, {"name": "B12 Vitamini", "id": 20000196890202, "prettyName": "b12-vitamini-l-bbc4e5a"}, {"name": "B2 Vitamini", "id": 20000196890190, "prettyName": "b2-vitamini-l-bbc4e4e"}, {"name": "Gücünü Proteinden Al!", "id": 20000000189440, "prettyName": "gucunu-proteinden-al-l-2e400"}], "images": [{"urls": {"PRODUCT_LIST": "https://images.migrosone.com/sanalmarket/product/11019904/11019904_1-f55980-105x105.jpg", "PRODUCT_DETAIL": "https://images.migrosone.com/sanalmarket/product/11019904/11019904_1-f55980.jpg", "PRODUCT_HD": "https://images.migrosone.com/sanalmarket/product/11019904/11019904_1-f55980-1650x1650.jpg", "CART": "https://images.migrosone.com/sanalmarket/product/11019904/11019904_1-f55980-46x46.jpg"}, "productId": 20000011019904}], "energyImages": [], "prettyName": "torku-uht-sut-1-l-p-a82680", "productInstallmentInfo": {"installmentApplicable": false, "maxInstallmentCount": 1, "installmentDescription": "<p><strong>Ödeme ve Taksit Seçenekleri Hakkında</strong><br>Sepetinizde taksit seçeneği birbirinden farklı ürünlerin yer alması halinde, uygulanabilecek taksit sayısı, taksit seçeneği en düşük olan ürün baz alınarak belirlenir.<br>Taksit ve vade farkı uygulamalarında tek taraflı değişiklik yapılması hakkı saklıdır.</p>"}, "productOptionInfos": [], "propertyInfosMap": {"OTHER": [{"id": 20000000000487, "type": "OTHER", "name": "Gıda", "priority": 1, "customId": "foodProperty", "value": "E"}], "SEARCH_SEGMENT": [{"id": 20000000000154, "type": "SEARCH_SEGMENT", "name": "000", "priority": 0, "value": "0.18481414710000005"}, {"id": 20000000000153, "type": "SEARCH_SEGMENT", "name": "001", "priority": 0, "value": "0.2549723125"}, {"id": 20000000000152, "type": "SEARCH_SEGMENT", "name": "010", "priority": 0, "value": "0.137850285"}, {"id": 20000000000150, "type": "SEARCH_SEGMENT", "name": "011", "priority": 0, "value": "0.6277143552"}, {"id": 20000000000151, "type": "SEARCH_SEGMENT", "name": "100", "priority": 0, "value": "0.3887547842"}, {"id": 20000000000147, "type": "SEARCH_SEGMENT", "name": "101", "priority": 0, "value": "0.4226352106"}, {"id": 20000000000149, "type": "SEARCH_SEGMENT", "name": "110", "priority": 0, "value": "0.23570899800000003"}, {"id": 20000000000148, "type": "SEARCH_SEGMENT", "name": "111", "priority": 0, "value": "1.8035646348999999"}], "LEGAL": [{"id": 20000000000420, "type": "LEGAL", "name": "Kurye İçin Ağırlık", "priority": 3, "customId": "courier_weight", "value": "1090"}, {"id": 20000000000059, "type": "LEGAL", "name": "İşletmeci / Üretici / İthalatçı / Dağıtıcı", "priority": 7, "customId": "productSupplier", "value": "PANEK ZİRAAT ALETLERİ DAY.TÜK.MALZ.OTOM. YAKIT PET"}], "MAIN": [{"id": 20000000000054, "type": "MAIN", "name": "İçindekiler", "priority": 1, "value": "% 3,3 yağlı inek sütü (hayvansal)"}, {"id": 20000000000055, "type": "MAIN", "name": "Alerjen Uyarısı", "priority": 2, "value": "Süt içerir."}, {"id": 20000000000056, "type": "MAIN", "name": "Net Miktar (g/ml)", "priority": 3, "customId": "netKg", "value": "1000"}, {"id": 20000000000058, "type": "MAIN", "name": "Saklama Koşulları", "priority": 4, "value": "Serin ve Kuru Yerde Muhafaza Ediniz"}, {"id": 20000000000057, "type": "MAIN", "name": "Menşei", "priority": 5, "customId": "country", "value": "TÜRKİYE"}, {"id": 20000000000061, "type": "MAIN", "name": "İşletme Kayıt No", "priority": 6, "customId": "productionPermitCertNo", "value": "TR 42-0104"}, {"id": 20000000000289, "type": "MAIN", "name": "İşletmeci / Üretici / İthalatçı / Dağıtıcı Numarası", "priority": 8, "customId": "productSupplierId", "value": "704073"}, {"id": 20000000000372, "type": "MAIN", "name": "İşletmeci / Üretici / İthalatçı / Dağıtıcı Adresi", "priority": 10, "customId": "productSupplierAddress", "value": "BEYŞEHİR YOLU ÜZERİ NO.19 SELÇUKLU KONYA"}, {"id": 20000000000060, "type": "MAIN", "name": "Kullanım Önerileri", "priority": 11, "value": "Son tüketim tarihine kadar tüketilmelidir. Açıldıktan sonra buzdolabında muhafaza edip 2 gün içinde tüketiniz."}], "NUTRITIONAL": [{"id": 20000000000029, "type": "NUTRITIONAL", "name": "Enerji (kcal)", "priority": 1, "customId": "energyKcal", "value": "60.0"}, {"id": 20000000000065, "type": "NUTRITIONAL", "name": "Enerji (kJ)", "priority": 2, "customId": "energyKj", "value": "251.0"}, {"id": 20000000000030, "type": "NUTRITIONAL", "name": "Yağ (g)", "priority": 3, "customId": "fat", "value": "3.3"}, {"id": 20000000000031, "type": "NUTRITIONAL", "name": "Doymuş yağ (g)", "priority": 4, "customId": "saturatedFat", "value": "2.3"}, {"id": 20000000000033, "type": "NUTRITIONAL", "name": "Karbonhidrat (g)", "priority": 9, "customId": "carbohydrate", "value": "4.8"}, {"id": 20000000000034, "type": "NUTRITIONAL", "name": "Şeker (g)", "priority": 10, "customId": "glucose", "value": "3.4"}, {"id": 20000000000036, "type": "NUTRITIONAL", "name": "Protein (g)", "priority": 14, "customId": "protein", "value": "2.8"}, {"id": 20000000000038, "type": "NUTRITIONAL", "name": "Tuz (g)", "priority": 15, "customId": "salt", "value": "0.2"}, {"id": 20000000000080, "type": "NUTRITIONAL", "name": "Pantotenik Asit (mg)", "priority": 29, "value": "250.0"}]}, "specialDietTags": [], "crmDiscountTags": [{"type": "CRM_DISCOUNT", "tag": "50 TL SEPETTE 59,90 TL"}], "attributeTags": [], "status": "IN_SALE", "saleable": true, "unit": "PIECE", "initialIncrementAmount": 1, "incrementAmount": 1, "maxAmount": 8, "maxAmountDescription": "Bu üründen en fazla 8 adet sipariş verilebilir. Belirtilen adet üzerindeki siparişlerin iptal edilmesi hakkı saklıdır.", "unitAmount": 1, "regularPrice": 7500, "salePrice": 7500, "loyaltyPrice": 7500, "shownPrice": 7500, "discountRate": 0, "discounts": {}, "discountDescriptions": [], "badges": [], "storePortfolio": "MARKET", "referrerEventId": "1794049551121332659", "sponsored": false, "productNoteAppendable": false, "buyNowApplicable": false, "productSafetyInfo": {"productSupplierInfo": {"supplierDetails": [{"name": "İşletmeci / Üretici / İthalatçı / Dağıtıcı", "value": "PANEK ZİRAAT ALETLERİ DAY.TÜK.MALZ.OTOM. YAKIT PET"}, {"name": "İşletmeci / Üretici / İthalatçı / Dağıtıcı Numarası", "value": "704073"}, {"name": "İşletmeci / Üretici / İthalatçı / Dağıtıcı Adresi", "value": "BEYŞEHİR YOLU ÜZERİ NO.19 SELÇUKLU KONYA"}]}, "productSafetyImageInfo": {"images": [{"urls": {"LEGAL": "https://images.migrosone.com/sanalmarket/product-legal/11019904/11019904_bicakizi-8b92fb.jpeg"}, "productId": 20000011019904}]}}, "insuranceProductDetails": [], "groupBadgeMap": {"ALL": [{"badgeId": 20000000000040, "name": "Seç Al", "description": "50 TL ve üzeri alışverişlerde farklı ürünlerde farklı indirim oranları uygulanacaktır. Kampanyadan faydalanabilmek için kampanyalı ürünler haricinde 50 TL'lik sepet oluşturman gerekmektedir. Her 50 TL'lik alışverişte seç al kampanyası geçerli olacaktır. İndirim sepette düşecektir. Kampanyalı ürünler mağaza stoklarıyla sınırlıdır. Ürünler dönemsel olarak değişmektedir. Ürün stoklarının anlık değişkenlik göstermesi nedeniyle siparişinizde tedarik edilemeyen ürünler bulunabilir. Bu durumunda, kampanya koşullarını sağladığınız ölçüde indirimden faydalanabilirsiniz. Satın almış olduğunuz ürün/ürünlerde iade talebinde bulunduğunuzda; sipariş içerisinde yararlanmış olduğunuz kampanya koşullarına uygun olarak indirim tutarı, iadesi talep edilen ürünlere bedeli oranında yansıtılacak olup iade ettiğiniz üründen söz konusu indirim tutarı düşülerek ücret iadesi gerçekleştirilecektir.", "iconUrls": [{"badgeId": 20000000000040, "urls": {"LARGE": "https://images.migrosone.com/sanalmarket/product-badge/20000000000040/rozetler_120x120-62-99c145.png"}}], "priority": 2, "group": "MARKETING", "validityPeriod": "Geçerlilik Süresi: 28 Ekim - 08 Kasım 2026"}], "MARKETING": [{"badgeId": 20000000000040, "name": "Seç Al", "description": "50 TL ve üzeri alışverişlerde farklı ürünlerde farklı indirim oranları uygulanacaktır. Kampanyadan faydalanabilmek için kampanyalı ürünler haricinde 50 TL'lik sepet oluşturman gerekmektedir. Her 50 TL'lik alışverişte seç al kampanyası geçerli olacaktır. İndirim sepette düşecektir. Kampanyalı ürünler mağaza stoklarıyla sınırlıdır. Ürünler dönemsel olarak değişmektedir. Ürün stoklarının anlık değişkenlik göstermesi nedeniyle siparişinizde tedarik edilemeyen ürünler bulunabilir. Bu durumunda, kampanya koşullarını sağladığınız ölçüde indirimden faydalanabilirsiniz. Satın almış olduğunuz ürün/ürünlerde iade talebinde bulunduğunuzda; sipariş içerisinde yararlanmış olduğunuz kampanya koşullarına uygun olarak indirim tutarı, iadesi talep edilen ürünlere bedeli oranında yansıtılacak olup iade ettiğiniz üründen söz konusu indirim tutarı düşülerek ücret iadesi gerçekleştirilecektir.", "iconUrls": [{"badgeId": 20000000000040, "urls": {"LARGE": "https://images.migrosone.com/sanalmarket/product-badge/20000000000040/rozetler_120x120-62-99c145.png"}}], "priority": 2, "group": "MARKETING", "validityPeriod": "Geçerlilik Süresi: 28 Ekim - 08 Kasım 2026"}]}, "socialProofInfo": {"socialProofPriority": 2, "categoryId": 18000000075684, "categoryName": "Uzun Ömürlü Süt", "description": "Uzun Ömürlü Süt kategorisinin en çok satan 2. ürünüdür"}, "sellerInfo": {"sellerId": 20, "sellerName": "Migros Sanal Market"}, "analytics": {"seller_type": "INTERNAL", "store_id": 20000000000607, "seller_id": 20, "seller_name": "Migros Sanal Market", "store_name": "BEYLİKDÜZÜ 5M MİGROS"}, "sortedProperties": {}, "generalInformation": "Ürünün stok, fiyat ve kampanya bilgisi, teslimatı gerçekleştirecek mağazanın stok, fiyat ve kampanya bilgilerine göre belirlenmektedir.", "properties": {}}, {"id": 20000011014116, "storeId": 20000000000607, "storeGroupId": 1, "warehouseId": 607, "sku": "11014116", "name": "Danone Disney Kakaolu Süt 9 x 180 Ml", "description": "<p><strong>İçindekiler</strong><br>Süt, şeker, kakao tozu (%1,4), kıvam arttırıclar (sodyum karboksimetil selüloz, karragenan), aroma vericiler</p><p><strong>Alerjen Uyarısı</strong><br>Süt ürünleri</p><p><strong>Net Miktar (g/ml)</strong><br>1620</p><p><strong>Saklama Koşulları</strong><br>Serin ve Kuru Yerde Muhafaza Ediniz</p><p><strong>Menşei</strong><br>TÜRKİYE</p><p><strong>İşletme Kayıt No</strong><br>TR 39-0021</p><p><strong>Ürün Bilgilerini Kullanma Hakkında</strong><br>İnternet sitemizde ve online satış kanallarımızda yer alan ürün etiket bilgileri, ürünün tedarikçisi tarafından Migros Ticaret A.Ş.’ye iletilen en güncel bilgilerdir. Ürün etiket bilgileri ile internet sitemiz ve online satış kanallarımızda bulunan bilgiler arasında herhangi bir farklılık bulunması halinde sorumluluk tamamen tedarikçi firmaya aittir.</p>", "shortDescription": "", "information": "<p><strong>İçindekiler</strong><br>Süt, şeker, kakao tozu (%1,4), kıvam arttırıclar (sodyum karboksimetil selüloz, karragenan), aroma vericiler</p><p><strong>Alerjen Uyarısı</strong><br>Süt ürünleri</p><p><strong>Net Miktar (g/ml)</strong><br>1620</p><p><strong>Saklama Koşulları</strong><br>Serin ve Kuru Yerde Muhafaza Ediniz</p><p><strong>Menşei</strong><br>TÜRKİYE</p><p><strong>İşletme Kayıt No</strong><br>TR 39-0021</p>", "propertyLegalText": "<p><strong>Ürün Bilgilerini Kullanma Hakkında</strong><br>İnternet sitemizde ve online satış kanallarımızda yer alan ürün etiket bilgileri, ürünün tedarikçisi tarafından Migros Ticaret A.Ş.’ye iletilen en güncel bilgilerdir. Ürün etiket bilgileri ile internet sitemiz ve online satış kanallarımızda bulunan bilgiler arasında herhangi bir farklılık bulunması halinde sorumluluk tamamen tedarikçi firmaya aittir.</p>", "returnPolicy": "<div class=\"form-area return-policy-area\">\n <div class=\"in\">\n <p><strong>İade Sürecini Nasıl Başlatabilirim?</strong></p>\n <p>Migros uygulamasından aldığınız ürünler için <strong>14 gün</strong> gün içinde cayma hakkınızı\n kullanabilirsiniz. Bunun dışında, <strong>30 gün</strong>\n içinde ilettiğiniz iade talepleri için müşteri memnuniyeti politikalarımız kapsamında iade talepleriniz\n değerlendirilecektir. İade sürecini 0850 200 40 00 telefon numarası üzerinden başlatabilirsiniz.</p>\n <p><strong>İade Koşulları:</strong></p>\n <p>Her türlü iadeler mutlak suretle orjinal kutu ve ürünün ambalajı (koruma bandı) bozulmaksızın yapılmalıdır.</p>\n <p>Ürün fatura aslınının iade/değişim bildirimi ile birlikte gönderilmesi gerekmektedir.</p>\n <p></p>\n <p>Elektronik ürünler ve cep telefonları yetkili servis garantisinde bulunmaktadır. Üründe yaşanan sorun ya da\n ayıplı mal yetkili servis tarafından belgelendikten sonra tarafımızca tüm aksesuarları ile birlikte iade olarak\n kabul edilmektedir. Cep telefonları ürünlerinde kutu içerisindeki garanti belgesinin kaşelenmesi için ürünün\n kutusu açılmakta ve orjinal ambalajı açık şekilde teslim edilmektedir.\n </p>\n <p></p>\n <p>Kurulum gerektiren elektronik ürünler yetkili servis çalışanları tarafından açıldıktan sonra, herhangi bir\n hasar/kusur/ayıp tespit edilmesi halinde tespit tutanağı doldurtulması gerekir. Tespit tutanağı olmayan veya\n yetkili servis kontrolü dışında açılmış olan ürünler için iade/değişim işlemi gerçekleştirilemez.</p>\n <p></p>\n <p>Kargo belgesi ile teslim edilen ürünler kargo görevlisi huzurunda açılmalıdır. Ürünün dış ambalajında hiç bir\n hasar, açıklık, darbe, ıslaklık vb. olmaması, buna rağmen ürünün hasarlı çıkması durumunda, mevcut durum bir\n tutanakla karşılıklı olarak imza altına alınmalıdır. Kargo görevlisi tutanağın 1 nüshasını müşteriye vermekle\n yükümlüdür. Ürün hasar tespit tutanağının ve fatura aslının iade/değişim bildirimi ile birlikte gönderilmesi\n gerekmektedir.</p>\n <p><strong>Cayma Hakkının Geçerli Olmadığı Durumlar</strong></p>\n <ul>\n <li>Fiyatı finansal piyasalardaki dalgalanmalara bağlı olarak değişen ve satıcının kontrolünde olmayan ürün veya\n hizmetler iade/değişim kapsamında değerlendirilmemektedir.\n </li>\n <li>Kişisel istekler doğrultusunda size özel olarak üretilen veya üzerinde değişiklik yapılan ürünler iade/değişim\n kapsamında degerlendirilmemektedir.\n </li>\n <li>Çabuk bozulabilen veya son kullanma tarihi geçebilecek ürünler iade/değişim kapsamında\n değerlendirilmemektedir.\n </li>\n <li>Sağlık veya hijyen açısından iadesi uygun olmayıp, tesliminden sonra ambalaj, bant, mühür, paket gibi koruyucu\n unsurları açılmış olan ürünler iade/değişim kapsamında değerlendirilmemektedir. (İç giyim, mayo, bikini, kişisel\n bakım, kozmetik ürünleri vb.)\n </li>\n <li>Tesliminden sonra başka ürünlerle karışan ve doğası gereği ayrıştırılması mümkün olmayan ürünler iade/değişim\n kapsamında değerlendirilmemektedir.\n </li>\n <li>Ürünün tesliminden sonra ambalajın açılmış olması halinde maddi ortamda sunulan kitap, dijital içerik ve\n bilgisayar sarf malzemeleri iade/değişim kapsamında değerlendirilmemektedir.\n </li>\n <li>Abonelik sözleşmesi kapsamında sağlananlar dışında, gazete, dergi gibi süreli yayınlar iade/değişim kapsamında\n değerlendirilmemektedir.\n </li>\n <li>Belirli bir tarihte veya dönemde yapılması gereken, konaklama, eşya taşıma, araba kiralama, yiyecek- içecek\n tedariki ve boş zamanın değerlendirilmesine ilişkin ürünler iade/değişim kapsamında değerlendirilmemektedir.\n </li>\n <li>Elektronik ortamda anında ifa edilen hizmetler veya anında teslim edilen gayrimaddi ürünler iade/değişim\n kapsamında değerlendirilmemektedir.\n </li>\n <li>Yiyecek ve içecek gibi günlük tüketim maddelerinin, satıcının düzenli teslimatları çerçevesinde tüketicinin\n meskenine veya işyerine gönderilmesi iade/değişim kapsamında değerlendirilmemektedir.\n </li>\n <li>Karayolları Trafik Yönetmeliği kapsamında tescile tabi taşıt niteliğinde olan tiny house, karavan vb.\n ürünler iade/değişim kapsamında değerlendirilmemektedir.\n </li>\n </ul>\n </div>\n</div>\n", "brandId": 404, "brand": {"name": "Danone", "id": 404, "prettyName": "danone-b-194"}, "categoryId": 18000000075684, "category": {"name": "Uzun Ömürlü Süt", "id": 18000000075684, "prettyName": "uzun-omurlu-sut-c-127a4"}, "categoryAscendants": [{"name": "Süt", "id": 18000000075058, "prettyName": "sut-c-12532"}, {"name": "Süt, Şarküteri, Kahvaltılık", "id": 18000000074924, "prettyName": "sut-sarkuteri-kahvaltilik-c-124ac"}], "shadowCategoryId": 20000000001034, "shadowCategory": {"name": "Uzun Ömürlü Süt", "id": 20000000001034, "prettyName": "uzun-omurlu-sut-c-40a"}, "shadowCategoryAscendants": [{"name": "Süt", "id": 20000000000108, "prettyName": "sut-c-6c"}, {"name": "Süt, Kahvaltılık", "id": 20000000000004, "prettyName": "sut-kahvaltilik-c-4"}], "categoriesForSorting": [{"name": "Uzun Ömürlü Süt", "id": 18000000075684, "prettyName": "uzun-omurlu-sut-c-127a4"}, {"name": "Süt", "id": 18000000075058, "prettyName": "sut-c-12532"}, {"name": "Süt, Şarküteri, Kahvaltılık", "id": 18000000074924, "prettyName": "sut-sarkuteri-kahvaltilik-c-124ac"}], "lists": [{"name": "Kahvaltı 🥛🧀🥚", "id": 20000196920549, "prettyName": "kahvalti-l-bbcc4e5"}], "images": [{"urls": {"PRODUCT_LIST": "https://images.migrosone.com/sanalmarket/product/11014116/11014116_1-a74a7e-105x105.jpg", "PRODUCT_DETAIL": "https://images.migrosone.com/sanalmarket/product/11014116/11014116_1-a74a7e.jpg", "PRODUCT_HD": "https://images.migrosone.com/sanalmarket/product/11014116/11014116_1-a74a7e-1650x1650.jpg", "CART": "https://images.migrosone.com/sanalmarket/product/11014116/11014116_1-a74a7e-46x46.jpg"}, "productId": 20000011014116}, {"urls": {"PRODUCT_LIST": "https://images.migrosone.com/sanalmarket/product/11014116/11014116_2-dae02b-105x105.jpg", "PRODUCT_DETAIL": "https://images.migrosone.com/sanalmarket/product/11014116/11014116_2-dae02b.jpg", "PRODUCT_HD": "https://images.migrosone.com/sanalmarket/product/11014116/11014116_2-dae02b-1650x1650.jpg", "CART": "https://images.migrosone.com/sanalmarket/product/11014116/11014116_2-dae02b-46x46.jpg"}, "productId": 20000011014116}, {"urls": {"PRODUCT_LIST": "https://images.migrosone.com/sanalmarket/product/11014116/11014116_4-cfdadb-105x105.jpg", "PRODUCT_DETAIL": "https://images.migrosone.com/sanalmarket/product/11014116/11014116_4-cfdadb.jpg", "PRODUCT_HD": "https://images.migrosone.com/sanalmarket/product/11014116/11014116_4-cfdadb-1650x1650.jpg", "CART": "https://images.migrosone.com/sanalmarket/product/11014116/11014116_4-cfdadb-46x46.jpg"}, "productId": 20000011014116}, {"urls": {"PRODUCT_LIST": "https://images.migrosone.com/sanalmarket/product/11014116/11014116_5-a8f2b1-105x105.jpg", "PRODUCT_DETAIL": "https://images.migrosone.com/sanalmarket/product/11014116/11014116_5-a8f2b1.jpg", "PRODUCT_HD": "https://images.migrosone.com/sanalmarket/product/11014116/11014116_5-a8f2b1-1650x1650.jpg", "CART": "https://images.migrosone.com/sanalmarket/product/11014116/11014116_5-a8f2b1-46x46.jpg"}, "productId": 20000011014116}], "energyImages": [], "prettyName": "danone-disney-kakaolu-sut-9-x-180-ml-p-a80fe4", "productInstallmentInfo": {"installmentApplicable": false, "maxInstallmentCount": 1, "installmentDescription": "<p><strong>Ödeme ve Taksit Seçenekleri Hakkında</strong><br>Sepetinizde taksit seçeneği birbirinden farklı ürünlerin yer alması halinde, uygulanabilecek taksit sayısı, taksit seçeneği en düşük olan ürün baz alınarak belirlenir.<br>Taksit ve vade farkı uygulamalarında tek taraflı değişiklik yapılması hakkı saklıdır.</p>"}, "productOptionInfos": [], "propertyInfosMap": {"OTHER": [{"id": 20000000000487, "type": "OTHER", "name": "Gıda", "priority": 1, "customId": "foodProperty", "value": "E"}], "SEARCH_SEGMENT": [{"id": 20000000000154, "type": "SEARCH_SEGMENT", "name": "000", "priority": 0, "value": "0.03144617444"}, {"id": 20000000000153, "type": "SEARCH_SEGMENT", "name": "001", "priority": 0, "value": "0.06940051138"}, {"id": 20000000000152, "type": "SEARCH_SEGMENT", "name": "010", "priority": 0, "value": "0.022394745400000002"}, {"id": 20000000000150, "type": "SEARCH_SEGMENT", "name": "011", "priority": 0, "value": "0.18955122951999998"}, {"id": 20000000000151, "type": "SEARCH_SEGMENT", "name": "100", "priority": 0, "value": "0.09431847514000001"}, {"id": 20000000000147, "type": "SEARCH_SEGMENT", "name": "101", "priority": 0, "value": "0.1442571456"}, {"id": 20000000000149, "type": "SEARCH_SEGMENT", "name": "110", "priority": 0, "value": "0.030420920159999996"}, {"id": 20000000000148, "type": "SEARCH_SEGMENT", "name": "111", "priority": 0, "value": "0.5211165832800001"}], "LEGAL": [{"id": 20000000000420, "type": "LEGAL", "name": "Kurye İçin Ağırlık", "priority": 3, "customId": "courier_weight", "value": "1915"}, {"id": 20000000000059, "type": "LEGAL", "name": "İşletmeci / Üretici / İthalatçı / Dağıtıcı", "priority": 7, "customId": "productSupplier", "value": "DANONE TİKVEŞLİ GIDA VE İÇECEK SAN.VE Tİ C.A.Ş."}, {"id": 20000000000372, "type": "LEGAL", "name": "İşletmeci / Üretici / İthalatçı / Dağıtıcı Adresi", "priority": 10, "customId": "productSupplierAddress", "value": "VEDAT GÜNYOL CD.DEFNE SOK.NO.3 K.BAKKALKÖY-ATAŞEHİR İSTANBUL"}], "MISC": [{"id": 20000000000051, "type": "MISC", "name": "Ürün Özellikleri", "priority": 0, "customId": "productDetailsImage", "value": "https://images.migrosone.com/sanalmarket/custom/11014116-58ba670b.jpg"}], "MAIN": [{"id": 20000000000054, "type": "MAIN", "name": "İçindekiler", "priority": 1, "value": "Süt, şeker, kakao tozu (%1,4), kıvam arttırıclar (sodyum karboksimetil selüloz, karragenan), aroma vericiler"}, {"id": 20000000000055, "type": "MAIN", "name": "Alerjen Uyarısı", "priority": 2, "value": "Süt ürünleri"}, {"id": 20000000000056, "type": "MAIN", "name": "Net Miktar (g/ml)", "priority": 3, "customId": "netKg", "value": "1620"}, {"id": 20000000000058, "type": "MAIN", "name": "Saklama Koşulları", "priority": 4, "value": "Serin ve Kuru Yerde Muhafaza Ediniz"}, {"id": 20000000000057, "type": "MAIN", "name": "Menşei", "priority": 5, "customId": "country", "value": "TÜRKİYE"}, {"id": 20000000000061, "type": "MAIN", "name": "İşletme Kayıt No", "priority": 6, "customId": "productionPermitCertNo", "value": "TR 39-0021"}, {"id": 20000000000289, "type": "MAIN", "name": "İşletmeci / Üretici / İthalatçı / Dağıtıcı Numarası", "priority": 8, "customId": "productSupplierId", "value": "024662"}], "PL": [{"id": 20000000000190, "type": "PL", "name": "Sadece Migrosta", "priority": 1, "customId": "onlyInMigros", "value": "E"}], "NUTRITIONAL": [{"id": 20000000000029, "type": "NUTRITIONAL", "name": "Enerji (kcal)", "priority": 1, "customId": "energyKcal", "value": "60.0"}, {"id": 20000000000065, "type": "NUTRITIONAL", "name": "Enerji (kJ)", "priority": 2, "customId": "energyKj", "value": "254.0"}, {"id": 20000000000030, "type": "NUTRITIONAL", "name": "Yağ (g)", "priority": 3, "customId": "fat", "value": "1.0"}, {"id": 20000000000031, "type": "NUTRITIONAL", "name": "Doymuş yağ (g)", "priority": 4, "customId": "saturatedFat", "value": "0.7"}, {"id": 20000000000033, "type": "NUTRITIONAL", "name": "Karbonhidrat (g)", "priority": 9, "customId": "carbohydrate", "value": "9.7"}, {"id": 20000000000034, "type": "NUTRITIONAL", "name": "Şeker (g)", "priority": 10, "customId": "glucose", "value": "9.0"}, {"id": 20000000000036, "type": "NUTRITIONAL", "name": "Protein (g)", "priority": 14, "customId": "protein", "value": "3.1"}, {"id": 20000000000038, "type": "NUTRITIONAL", "name": "Tuz (g)", "priority": 15, "customId": "salt", "value": "0.1"}]}, "specialDietTags": [], "crmDiscountTags": [], "attributeTags": [], "status": "IN_SALE", "saleable": true, "unit": "PIECE", "initialIncrementAmount": 1, "incrementAmount": 1, "maxAmount": 8, "maxAmountDescription": "Bu üründen en fazla 8 adet sipariş verilebilir. Belirtilen adet üzerindeki siparişlerin iptal edilmesi hakkı saklıdır.", "unitAmount": 1, "regularPrice": 24990, "salePrice": 24990, "loyaltyPrice": 24990, "shownPrice": 24990, "unitPrice": "(154,25 TL/Litre)", "discountRate": 0, "discounts": {}, "discountDescriptions": [], "badges": [], "storePortfolio": "MARKET", "referrerEventId": "1794049551121332659", "sponsored": true, "productNoteAppendable": false, "buyNowApplicable": false, "advertisementInfo": {"adUnitName": "migros-sanalmarket-sponsored-product-4", "creativeId": 14257, "lineItemId": 12644, "keyword": "sut", "payload": "Lx5vdxgHjY0CYrqIA127+27uN6vN83WlLD3g2e7M4vmVEOc96A5J9Io4hDYgvNF5VQXWFzsg+h0htNxQGWuGHQTv6Omkjx3Yhr1WBdbvZjHA5VAilaYrooouRtVR8ZW5B6MVU4UTr91kMm2KiWPbO78mepwtxqDFqq3hzg866Gg="}, "productSafetyInfo": {"productSupplierInfo": {"supplierDetails": [{"name": "İşletmeci / Üretici / İthalatçı / Dağıtıcı", "value": "DANONE TİKVEŞLİ GIDA VE İÇECEK SAN.VE Tİ C.A.Ş."}, {"name": "İşletmeci / Üretici / İthalatçı / Dağıtıcı Numarası", "value": "024662"}, {"name": "İşletmeci / Üretici / İthalatçı / Dağıtıcı Adresi", "value": "VEDAT GÜNYOL CD.DEFNE SOK.NO.3 K.BAKKALKÖY-ATAŞEHİR İSTANBUL"}]}, "productSafetyImageInfo": {"images": [{"urls": {"LEGAL": "https://images.migrosone.com/sanalmarket/product-legal/11014116/11014116_bicakizi-8918b2.png"}, "productId": 20000011014116}]}}, "insuranceProductDetails": [], "groupBadgeMap": {}, "sellerInfo": {"sellerId": 20, "sellerName": "Migros Sanal Market"}, "analytics": {"seller_type": "INTERNAL", "store_id": 20000000000607, "seller_id": 20, "seller_name": "Migros Sanal Market", "store_name": "BEYLİKDÜZÜ 5M MİGROS"}, "sortedProperties": {}, "generalInformation": "Ürünün stok, fiyat ve kampanya bilgisi, teslimatı gerçekleştirecek mağazanın stok, fiyat ve kampanya bilgilerine göre belirlenmektedir.", "properties": {}}, {"id": 20000011014119, "storeId": 20000000000607, "storeGroupId": 1, "warehouseId": 607, "sku": "11014119", "name": "Danone Disney Çilekli Süt 6 x 180 Ml", "description": "<p><strong>İçindekiler</strong><br>Pastörize inek sütü, şeker, çilek aroma vericisi, çilek püresi (%0,01)</p><p><strong>Alerjen Uyarısı</strong><br>Süt ürünleri</p><p><strong>Net Miktar (g/ml)</strong><br>1080</p><p><strong>Saklama Koşulları</strong><br>Serin ve Kuru Yerde Muhafaza Ediniz</p><p><strong>Menşei</strong><br>TÜRKİYE</p><p><strong>İşletme Kayıt No</strong><br>TR 39-0021</p><p><strong>Ürün Bilgilerini Kullanma Hakkında</strong><br>İnternet sitemizde ve online satış kanallarımızda yer alan ürün etiket bilgileri, ürünün tedarikçisi tarafından Migros Ticaret A.Ş.’ye iletilen en güncel bilgilerdir. Ürün etiket bilgileri ile internet sitemiz ve online satış kanallarımızda bulunan bilgiler arasında herhangi bir farklılık bulunması halinde sorumluluk tamamen tedarikçi firmaya aittir.</p>", "shortDescription": "", "information": "<p><strong>İçindekiler</strong><br>Pastörize inek sütü, şeker, çilek aroma vericisi, çilek püresi (%0,01)</p><p><strong>Alerjen Uyarısı</strong><br>Süt ürünleri</p><p><strong>Net Miktar (g/ml)</strong><br>1080</p><p><strong>Saklama Koşulları</strong><br>Serin ve Kuru Yerde Muhafaza Ediniz</p><p><strong>Menşei</strong><br>TÜRKİYE</p><p><strong>İşletme Kayıt No</strong><br>TR 39-0021</p>", "propertyLegalText": "<p><strong>Ürün Bilgilerini Kullanma Hakkında</strong><br>İnternet sitemizde ve online satış kanallarımızda yer alan ürün etiket bilgileri, ürünün tedarikçisi tarafından Migros Ticaret A.Ş.’ye iletilen en güncel bilgilerdir. Ürün etiket bilgileri ile internet sitemiz ve online satış kanallarımızda bulunan bilgiler arasında herhangi bir farklılık bulunması halinde sorumluluk tamamen tedarikçi firmaya aittir.</p>", "returnPolicy": "<div class=\"form-area return-policy-area\">\n <div class=\"in\">\n <p><strong>İade Sürecini Nasıl Başlatabilirim?</strong></p>\n <p>Migros uygulamasından aldığınız ürünler için <strong>14 gün</strong> gün içinde cayma hakkınızı\n kullanabilirsiniz. Bunun dışında, <strong>30 gün</strong>\n içinde ilettiğiniz iade talepleri için müşteri memnuniyeti politikalarımız kapsamında iade talepleriniz\n değerlendirilecektir. İade sürecini 0850 200 40 00 telefon numarası üzerinden başlatabilirsiniz.</p>\n <p><strong>İade Koşulları:</strong></p>\n <p>Her türlü iadeler mutlak suretle orjinal kutu ve ürünün ambalajı (koruma bandı) bozulmaksızın yapılmalıdır.</p>\n <p>Ürün fatura aslınının iade/değişim bildirimi ile birlikte gönderilmesi gerekmektedir.</p>\n <p></p>\n <p>Elektronik ürünler ve cep telefonları yetkili servis garantisinde bulunmaktadır. Üründe yaşanan sorun ya da\n ayıplı mal yetkili servis tarafından belgelendikten sonra tarafımızca tüm aksesuarları ile birlikte iade olarak\n kabul edilmektedir. Cep telefonları ürünlerinde kutu içerisindeki garanti belgesinin kaşelenmesi için ürünün\n kutusu açılmakta ve orjinal ambalajı açık şekilde teslim edilmektedir.\n </p>\n <p></p>\n <p>Kurulum gerektiren elektronik ürünler yetkili servis çalışanları tarafından açıldıktan sonra, herhangi bir\n hasar/kusur/ayıp tespit edilmesi halinde tespit tutanağı doldurtulması gerekir. Tespit tutanağı olmayan veya\n yetkili servis kontrolü dışında açılmış olan ürünler için iade/değişim işlemi gerçekleştirilemez.</p>\n <p></p>\n <p>Kargo belgesi ile teslim edilen ürünler kargo görevlisi huzurunda açılmalıdır. Ürünün dış ambalajında hiç bir\n hasar, açıklık, darbe, ıslaklık vb. olmaması, buna rağmen ürünün hasarlı çıkması durumunda, mevcut durum bir\n tutanakla karşılıklı olarak imza altına alınmalıdır. Kargo görevlisi tutanağın 1 nüshasını müşteriye vermekle\n yükümlüdür. Ürün hasar tespit tutanağının ve fatura aslının iade/değişim bildirimi ile birlikte gönderilmesi\n gerekmektedir.</p>\n <p><strong>Cayma Hakkının Geçerli Olmadığı Durumlar</strong></p>\n <ul>\n <li>Fiyatı finansal piyasalardaki dalgalanmalara bağlı olarak değişen ve satıcının kontrolünde olmayan ürün veya\n hizmetler iade/değişim kapsamında değerlendirilmemektedir.\n </li>\n <li>Kişisel istekler doğrultusunda size özel olarak üretilen veya üzerinde değişiklik yapılan ürünler iade/değişim\n kapsamında degerlendirilmemektedir.\n </li>\n <li>Çabuk bozulabilen veya son kullanma tarihi geçebilecek ürünler iade/değişim kapsamında\n değerlendirilmemektedir.\n </li>\n <li>Sağlık veya hijyen açısından iadesi uygun olmayıp, tesliminden sonra ambalaj, bant, mühür, paket gibi koruyucu\n unsurları açılmış olan ürünler iade/değişim kapsamında değerlendirilmemektedir. (İç giyim, mayo, bikini, kişisel\n bakım, kozmetik ürünleri vb.)\n </li>\n <li>Tesliminden sonra başka ürünlerle karışan ve doğası gereği ayrıştırılması mümkün olmayan ürünler iade/değişim\n kapsamında değerlendirilmemektedir.\n </li>\n <li>Ürünün tesliminden sonra ambalajın açılmış olması halinde maddi ortamda sunulan kitap, dijital içerik ve\n bilgisayar sarf malzemeleri iade/değişim kapsamında değerlendirilmemektedir.\n </li>\n <li>Abonelik sözleşmesi kapsamında sağlananlar dışında, gazete, dergi gibi süreli yayınlar iade/değişim kapsamında\n değerlendirilmemektedir.\n </li>\n <li>Belirli bir tarihte veya dönemde yapılması gereken, konaklama, eşya taşıma, araba kiralama, yiyecek- içecek\n tedariki ve boş zamanın değerlendirilmesine ilişkin ürünler iade/değişim kapsamında değerlendirilmemektedir.\n </li>\n <li>Elektronik ortamda anında ifa edilen hizmetler veya anında teslim edilen gayrimaddi ürünler iade/değişim\n kapsamında değerlendirilmemektedir.\n </li>\n <li>Yiyecek ve içecek gibi günlük tüketim maddelerinin, satıcının düzenli teslimatları çerçevesinde tüketicinin\n meskenine veya işyerine gönderilmesi iade/değişim kapsamında değerlendirilmemektedir.\n </li>\n <li>Karayolları Trafik Yönetmeliği kapsamında tescile tabi taşıt niteliğinde olan tiny house, karavan vb.\n ürünler iade/değişim kapsamında değerlendirilmemektedir.\n </li>\n </ul>\n </div>\n</div>\n", "brandId": 404, "brand": {"name": "Danone", "id": 404, "prettyName": "danone-b-194"}, "categoryId": 18000000075684, "category": {"name": "Uzun Ömürlü Süt", "id": 18000000075684, "prettyName": "uzun-omurlu-sut-c-127a4"}, "categoryAscendants": [{"name": "Süt", "id": 18000000075058, "prettyName": "sut-c-12532"}, {"name": "Süt, Şarküteri, Kahvaltılık", "id": 18000000074924, "prettyName": "sut-sarkuteri-kahvaltilik-c-124ac"}], "shadowCategoryId": 20000000001034, "shadowCategory": {"name": "Uzun Ömürlü Süt", "id": 20000000001034, "prettyName": "uzun-omurlu-sut-c-40a"}, "shadowCategoryAscendants": [{"name": "Süt", "id": 20000000000108, "prettyName": "sut-c-6c"}, {"name": "Süt, Kahvaltılık", "id": 20000000000004, "prettyName": "sut-kahvaltilik-c-4"}], "categoriesForSorting": [{"name": "Uzun Ömürlü Süt", "id": 18000000075684, "prettyName": "uzun-omurlu-sut-c-127a4"}, {"name": "Süt", "id": 18000000075058, "prettyName": "sut-c-12532"}, {"name": "Süt, Şarküteri, Kahvaltılık", "id": 18000000074924, "prettyName": "sut-sarkuteri-kahvaltilik-c-124ac"}], "lists": [{"name": "Kahvaltı 🥛🧀🥚", "id": 20000196920549, "prettyName": "kahvalti-l-bbcc4e5"}], "images": [{"urls": {"PRODUCT_LIST": "https://images.migrosone.com/sanalmarket/product/11014119/11014119_1-dea539-105x105.jpg", "PRODUCT_DETAIL": "https://images.migrosone.com/sanalmarket/product/11014119/11014119_1-dea539.jpg", "PRODUCT_HD": "https://images.migrosone.com/sanalmarket/product/11014119/11014119_1-dea539-1650x1650.jpg", "CART": "https://images.migrosone.com/sanalmarket/product/11014119/11014119_1-dea539-46x46.jpg"}, "productId": 20000011014119}, {"urls": {"PRODUCT_LIST": "https://images.migrosone.com/sanalmarket/product/11014119/11014119_2-149690-105x105.jpg", "PRODUCT_DETAIL": "https://images.migrosone.com/sanalmarket/product/11014119/11014119_2-149690.jpg", "PRODUCT_HD": "https://images.migrosone.com/sanalmarket/product/11014119/11014119_2-149690-1650x1650.jpg", "CART": "https://images.migrosone.com/sanalmarket/product/11014119/11014119_2-149690-46x46.jpg"}, "productId": 20000011014119}, {"urls": {"PRODUCT_LIST": "https://images.migrosone.com/sanalmarket/product/11014119/11014119_3-cfdadb-105x105.jpg", "PRODUCT_DETAIL": "https://images.migrosone.com/sanalmarket/product/11014119/11014119_3-cfdadb.jpg", "PRODUCT_HD": "https://images.migrosone.com/sanalmarket/product/11014119/11014119_3-cfdadb-1650x1650.jpg", "CART": "https://images.migrosone.com/sanalmarket/product/11014119/11014119_3-cfdadb-46x46.jpg"}, "productId": 20000011014119}, {"urls": {"PRODUCT_LIST": "https://images.migrosone.com/sanalmarket/product/11014119/11014119_4-07bbac-105x105.jpg", "PRODUCT_DETAIL": "https://images.migrosone.com/sanalmarket/product/11014119/11014119_4-07bbac.jpg", "PRODUCT_HD": "https://images.migrosone.com/sanalmarket/product/11014119/11014119_4-07bbac-1650x1650.jpg", "CART": "https://images.migrosone.com/sanalmarket/product/11014119/11014119_4-07bbac-46x46.jpg"}, "productId": 20000011014119}], "energyImages": [], "prettyName": "danone-disney-cilekli-sut-6-x-180-ml-p-a80fe7", "productInstallmentInfo": {"installmentApplicable": false, "maxInstallmentCount": 1, "installmentDescription": "<p><strong>Ödeme ve Taksit Seçenekleri Hakkında</strong><br>Sepetinizde taksit seçeneği birbirinden farklı ürünlerin yer alması halinde, uygulanabilecek taksit sayısı, taksit seçeneği en düşük olan ürün baz alınarak belirlenir.<br>Taksit ve vade farkı uygulamalarında tek taraflı değişiklik yapılması hakkı saklıdır.</p>"}, "productOptionInfos": [], "propertyInfosMap": {"OTHER": [{"id": 20000000000487, "type": "OTHER", "name": "Gıda", "priority": 1, "customId": "foodProperty", "value": "E"}], "SEARCH_SEGMENT": [{"id": 20000000000154, "type": "SEARCH_SEGMENT", "name": "000", "priority": 0, "value": "0.10511777816000002"}, {"id": 20000000000153, "type": "SEARCH_SEGMENT", "name": "001", "priority": 0, "value": "0.13975288706000003"}, {"id": 20000000000152, "type": "SEARCH_SEGMENT", "name": "010", "priority": 0, "value": "0.06429461466"}, {"id": 20000000000150, "type": "SEARCH_SEGMENT", "name": "011", "priority": 0, "value": "0.36843837332"}, {"id": 20000000000151, "type": "SEARCH_SEGMENT", "name": "100", "priority": 0, "value": "0.23859676811999997"}, {"id": 20000000000147, "type": "SEARCH_SEGMENT", "name": "101", "priority": 0, "value": "0.21713318239999996"}, {"id": 20000000000149, "type": "SEARCH_SEGMENT", "name": "110", "priority": 0, "value": "0.06943038708"}, {"id": 20000000000148, "type": "SEARCH_SEGMENT", "name": "111", "priority": 0, "value": "1.17556868382"}], "LEGAL": [{"id": 20000000000420, "type": "LEGAL", "name": "Kurye İçin Ağırlık", "priority": 3, "customId": "courier_weight", "value": "1195"}, {"id": 20000000000059, "type": "LEGAL", "name": "İşletmeci / Üretici / İthalatçı / Dağıtıcı", "priority": 7, "customId": "productSupplier", "value": "DANONE TİKVEŞLİ GIDA VE İÇECEK SAN.VE Tİ C.A.Ş."}, {"id": 20000000000372, "type": "LEGAL", "name": "İşletmeci / Üretici / İthalatçı / Dağıtıcı Adresi", "priority": 10, "customId": "productSupplierAddress", "value": "VEDAT GÜNYOL CD.DEFNE SOK.NO.3 K.BAKKALKÖY-ATAŞEHİR İSTANBUL"}], "MISC": [{"id": 20000000000051, "type": "MISC", "name": "Ürün Özellikleri", "priority": 0, "customId": "productDetailsImage", "value": "https://images.migrosone.com/sanalmarket/custom/11014119-da3b2077.jpg"}], "MAIN": [{"id": 20000000000054, "type": "MAIN", "name": "İçindekiler", "priority": 1, "value": "Pastörize inek sütü, şeker, çilek aroma vericisi, çilek püresi (%0,01)"}, {"id": 20000000000055, "type": "MAIN", "name": "Alerjen Uyarısı", "priority": 2, "value": "Süt ürünleri"}, {"id": 20000000000056, "type": "MAIN", "name": "Net Miktar (g/ml)", "priority": 3, "customId": "netKg", "value": "1080"}, {"id": 20000000000058, "type": "MAIN", "name": "Saklama Koşulları", "priority": 4, "value": "Serin ve Kuru Yerde Muhafaza Ediniz"}, {"id": 20000000000057, "type": "MAIN", "name": "Menşei", "priority": 5, "customId": "country", "value": "TÜRKİYE"}, {"id": 20000000000061, "type": "MAIN", "name": "İşletme Kayıt No", "priority": 6, "customId": "productionPermitCertNo", "value": "TR 39-0021"}, {"id": 20000000000289, "type": "MAIN", "name": "İşletmeci / Üretici / İthalatçı / Dağıtıcı Numarası", "priority": 8, "customId": "productSupplierId", "value": "024662"}], "NUTRITIONAL": [{"id": 20000000000029, "type": "NUTRITIONAL", "name": "Enerji (kcal)", "priority": 1, "customId": "energyKcal", "value": "55.4"}, {"id": 20000000000065, "type": "NUTRITIONAL", "name": "Enerji (kJ)", "priority": 2, "customId": "energyKj", "value": "234.2"}, {"id": 20000000000030, "type": "NUTRITIONAL", "name": "Yağ (g)", "priority": 3, "customId": "fat", "value": "1.0"}, {"id": 20000000000031, "type": "NUTRITIONAL", "name": "Doymuş yağ (g)", "priority": 4, "customId": "saturatedFat", "value": "0.0"}, {"id": 20000000000033, "type": "NUTRITIONAL", "name": "Karbonhidrat (g)", "priority": 9, "customId": "carbohydrate", "value": "8.6"}, {"id": 20000000000034, "type": "NUTRITIONAL", "name": "Şeker (g)", "priority": 10, "customId": "glucose", "value": "0.0"}, {"id": 20000000000036, "type": "NUTRITIONAL", "name": "Protein (g)", "priority": 14, "customId": "protein", "value": "3.0"}, {"id": 20000000000038, "type": "NUTRITIONAL", "name": "Tuz (g)", "priority": 15, "customId": "salt", "value": "0.0"}]}, "specialDietTags": [], "crmDiscountTags": [], "attributeTags": [], "status": "IN_SALE", "saleable": true, "unit": "PIECE", "initialIncrementAmount": 1, "incrementAmount": 1, "maxAmount": 8, "maxAmountDescription": "Bu üründen en fazla 8 adet sipariş verilebilir. Belirtilen adet üzerindeki siparişlerin iptal edilmesi hakkı saklıdır.", "unitAmount": 1, "regularPrice": 18490, "salePrice": 18490, "loyaltyPrice": 18490, "shownPrice": 18490, "unitPrice": "(171,20 TL/Litre)", "discountRate": 0, "discounts": {}, "discountDescriptions": [], "badges": [], "storePortfolio": "MARKET", "referrerEventId": "1794049551121332659", "sponsored": true, "productNoteAppendable": false, "buyNowApplicable": false, "advertisementInfo": {"adUnitName": "migros-sanalmarket-sponsored-product-5", "creativeId": 14255, "lineItemId": 12644, "keyword": "sut", "payload": "Lx5vdxgHjY0CYrqIA127+27uN6vN83WlLD3g2e7M4vmVEOc96A5J9Io4hDYgvNF5VQXWFzsg+h0htNxQGWuGHe1VUs0B5TtYLQju18uKhlj9VbRYlccu9JmPXl+aUL3Frk/Xf6DlHo08ANZtokGOnLzjON4QpVFyI347pCtJdhA="}, "productSafetyInfo": {"productSupplierInfo": {"supplierDetails": [{"name": "İşletmeci / Üretici / İthalatçı / Dağıtıcı", "value": "DANONE TİKVEŞLİ GIDA VE İÇECEK SAN.VE Tİ C.A.Ş."}, {"name": "İşletmeci / Üretici / İthalatçı / Dağıtıcı Numarası", "value": "024662"}, {"name": "İşletmeci / Üretici / İthalatçı / Dağıtıcı Adresi", "value": "VEDAT GÜNYOL CD.DEFNE SOK.NO.3 K.BAKKALKÖY-ATAŞEHİR İSTANBUL"}]}, "productSafetyImageInfo": {"images": [{"urls": {"LEGAL": "https://images.migrosone.com/sanalmarket/product-legal/11014119/11014119_bicakizi-a88511.png"}, "productId": 20000011014119}]}}, "insuranceProductDetails": [], "groupBadgeMap": {}, "sellerInfo": {"sellerId": 20, "sellerName": "Migros Sanal Market"}, "analytics": {"seller_type": "INTERNAL", "store_id": 20000000000607, "seller_id": 20, "seller_name": "Migros Sanal Market", "store_name": "BEYLİKDÜZÜ 5M MİGROS"}, "sortedProperties": {}, "generalInformation": "Ürünün stok, fiyat ve kampanya bilgisi, teslimatı gerçekleştirecek mağazanın stok, fiyat ve kampanya bilgilerine göre belirlenmektedir.", "properties": {}}], "sortCriteria": [{"selected": true, "name": "RELEVANCE", "label": "Akıllı Sıralama", "requestParam": "akilli-siralama"}, {"selected": false, "name": "WEEKLY_BEST_SELLER", "label": "Çok Satanlar", "requestParam": "cok-satanlar"}, {"selected": false, "name": "LAST_ORDERS", "label": "Satın Aldıklarıma Göre", "requestParam": "satin-aldiklarima-gore"}, {"selected": false, "name": "DISCOUNT_PERCENTAGE", "label": "İndirim Yüzdesine Göre", "requestParam": "indirim-yuzdesine-gore"}, {"selected": false, "name": "PRICE_ASC", "label": "Önce En Düşük Fiyat", "requestParam": "once-en-dusuk-fiyat"}, {"selected": false, "name": "PRICE_DESC", "label": "Önce En Yüksek Fiyat", "requestParam": "once-en-yuksek-fiyat"}, {"selected": false, "name": "DISCOUNT_AMOUNT", "label": "İndirim Miktarına Göre", "requestParam": "indirim-miktarina-gore"}], "aggregationGroups": [{"type": "DISCOUNT", "label": "İndirimler", "requestParamKey": "indirim", "aggregationInfos": [{"checked": false, "id": "MCC", "count": 33, "requestParameter": "MCC", "label": "Money İndirimli Market Ürünleri"}, {"checked": false, "id": "CROSS_DISCOUNT", "count": 9, "requestParameter": "CROSS_DISCOUNT", "label": "Çoklu İndirim Kampanyaları ve Hediyeli Ürünler"}]}, {"type": "BRAND", "label": "Markalar", "requestParamKey": "markalar", "aggregationInfos": [{"checked": false, "id": "496", "count": 28, "requestParameter": "496", "label": "Aptamil", "prettyName": "aptamil-b-1f0"}, {"checked": false, "id": "731", "count": 23, "requestParameter": "731", "label": "İçim", "prettyName": "icim-b-2db"}, {"checked": false, "id": "349", "count": 22, "requestParameter": "349", "label": "Sek", "prettyName": "sek-b-15d"}, {"checked": false, "id": "170", "count": 22, "requestParameter": "170", "label": "Pınar", "prettyName": "pinar-b-aa"}, {"checked": false, "id": "434", "count": 14, "requestParameter": "434", "label": "Torku", "prettyName": "torku-b-1b2"}, {"checked": false, "id": "169", "count": 14, "requestParameter": "169", "label": "Alpro", "prettyName": "alpro-b-a9"}, {"checked": false, "id": "512", "count": 14, "requestParameter": "512", "label": "Sma", "prettyName": "sma-b-200"}, {"checked": false, "id": "425", "count": 12, "requestParameter": "425", "label": "Migros", "prettyName": "migros-b-1a9"}, {"checked": false, "id": "404", "count": 10, "requestParameter": "404", "label": "Danone", "prettyName": "danone-b-194"}, {"checked": false, "id": "495", "count": 10, "requestParameter": "495", "label": "Bebelac", "prettyName": "bebelac-b-1ef"}, {"checked": false, "id": "518", "count": 9, "requestParameter": "518", "label": "Eti", "prettyName": "eti-b-206"}, {"checked": false, "id": "389", "count": 8, "requestParameter": "389", "label": "Fomilk", "prettyName": "fomilk-b-185"}, {"checked": false, "id": "1699", "count": 7, "requestParameter": "1699", "label": "Kahve Dünyası", "prettyName": "kahve-dunyasi-b-6a3"}, {"checked": false, "id": "56", "count": 7, "requestParameter": "56", "label": "Hipp", "prettyName": "hipp-b-38"}, {"checked": false, "id": "4760", "count": 6, "requestParameter": "4760", "label": "Tire Süt Kooperatifi", "prettyName": "tire-sut-kooperatifi-b-1298"}, {"checked": false, "id": "7109", "count": 5, "requestParameter": "7109", "label": "Nilky", "prettyName": "nilky-b-1bc5"}, {"checked": false, "id": "98", "count": 5, "requestParameter": "98", "label": "Lindt", "prettyName": "lindt-b-62"}, {"checked": false, "id": "447", "count": 5, "requestParameter": "447", "label": "Ülker", "prettyName": "ulker-b-1bf"}, {"checked": false, "id": "618", "count": 5, "requestParameter": "618", "label": "Godiva", "prettyName": "godiva-b-26a"}, {"checked": false, "id": "593", "count": 5, "requestParameter": "593", "label": "Tadelle", "prettyName": "tadelle-b-251"}, {"checked": false, "id": "6994", "count": 5, "requestParameter": "6994", "label": "Jovia", "prettyName": "jovia-b-1b52"}, {"checked": false, "id": "458", "count": 4, "requestParameter": "458", "label": "Nesquik", "prettyName": "nesquik-b-1ca"}, {"checked": false, "id": "850", "count": 4, "requestParameter": "850", "label": "Le Petit Marseillais", "prettyName": "le-petit-marseillais-b-352"}, {"checked": false, "id": "1702", "count": 4, "requestParameter": "1702", "label": "Mövenpick", "prettyName": "movenpick-b-6a6"}, {"checked": false, "id": "679", "count": 4, "requestParameter": "679", "label": "Dimes", "prettyName": "dimes-b-2a7"}, {"checked": false, "id": "503", "count": 3, "requestParameter": "503", "label": "Pakmaya", "prettyName": "pakmaya-b-1f7"}, {"checked": false, "id": "4669", "count": 3, "requestParameter": "4669", "label": "Saklıköy", "prettyName": "saklikoy-b-123d"}, {"checked": false, "id": "727", "count": 3, "requestParameter": "727", "label": "Yörsan", "prettyName": "yorsan-b-2d7"}, {"checked": false, "id": "445", "count": 3, "requestParameter": "445", "label": "Milupa", "prettyName": "milupa-b-1bd"}, {"checked": false, "id": "9106", "count": 3, "requestParameter": "9106", "label": "Galler", "prettyName": "galler-b-2392"}, {"checked": false, "id": "329", "count": 3, "requestParameter": "329", "label": "Nestle", "prettyName": "nestle-b-149"}, {"checked": false, "id": "587", "count": 3, "requestParameter": "587", "label": "Kinder", "prettyName": "kinder-b-24b"}, {"checked": false, "id": "9226", "count": 3, "requestParameter": "9226", "label": "Tazelen", "prettyName": "tazelen-b-240a"}, {"checked": false, "id": "1792", "count": 3, "requestParameter": "1792", "label": "Damak", "prettyName": "damak-b-700"}, {"checked": false, "id": "861", "count": 3, "requestParameter": "861", "label": "Nivea", "prettyName": "nivea-b-35d"}, {"checked": false, "id": "7246", "count": 2, "requestParameter": "7246", "label": "Ganik", "prettyName": "ganik-b-1c4e"}, {"checked": false, "id": "1108", "count": 2, "requestParameter": "1108", "label": "Ambre Solaire", "prettyName": "ambre-solaire-b-454"}, {"checked": false, "id": "148", "count": 2, "requestParameter": "148", "label": "Baltalı", "prettyName": "baltali-b-94"}, {"checked": false, "id": "451", "count": 2, "requestParameter": "451", "label": "Tchibo", "prettyName": "tchibo-b-1c3"}, {"checked": false, "id": "596", "count": 2, "requestParameter": "596", "label": "Bind", "prettyName": "bind-b-254"}, {"checked": false, "id": "5357", "count": 2, "requestParameter": "5357", "label": "Urban Care", "prettyName": "urban-care-b-14ed"}, {"checked": false, "id": "783", "count": 2, "requestParameter": "783", "label": "Velioğlu", "prettyName": "velioglu-b-30f"}, {"checked": false, "id": "1089", "count": 2, "requestParameter": "1089", "label": "Elidor", "prettyName": "elidor-b-441"}, {"checked": false, "id": "619", "count": 2, "requestParameter": "619", "label": "Ritter Sport", "prettyName": "ritter-sport-b-26b"}, {"checked": false, "id": "8963", "count": 2, "requestParameter": "8963", "label": "Migros Ekstra", "prettyName": "migros-ekstra-b-2303"}, {"checked": false, "id": "7133", "count": 2, "requestParameter": "7133", "label": "Morfose", "prettyName": "morfose-b-1bdd"}, {"checked": false, "id": "591", "count": 2, "requestParameter": "591", "label": "Milka", "prettyName": "milka-b-24f"}, {"checked": false, "id": "8165", "count": 2, "requestParameter": "8165", "label": "Dr Antique", "prettyName": "dr-antique-b-1fe5"}, {"checked": false, "id": "424", "count": 2, "requestParameter": "424", "label": "Yayla", "prettyName": "yayla-b-1a8"}, {"checked": false, "id": "452", "count": 2, "requestParameter": "452", "label": "Nescafe", "prettyName": "nescafe-b-1c4"}, {"checked": false, "id": "857", "count": 2, "requestParameter": "857", "label": "Dove", "prettyName": "dove-b-359"}, {"checked": false, "id": "4471", "count": 1, "requestParameter": "4471", "label": "Koop", "prettyName": "koop-b-1177"}, {"checked": false, "id": "23", "count": 1, "requestParameter": "23", "label": "The Lifeco", "prettyName": "the-lifeco-b-17"}, {"checked": false, "id": "1462", "count": 1, "requestParameter": "1462", "label": "Kiwi", "prettyName": "kiwi-b-5b6"}, {"checked": false, "id": "107", "count": 1, "requestParameter": "107", "label": "Bonne Maman", "prettyName": "bonne-maman-b-6b"}, {"checked": false, "id": "555", "count": 1, "requestParameter": "555", "label": "Oreo", "prettyName": "oreo-b-22b"}, {"checked": false, "id": "450", "count": 1, "requestParameter": "450", "label": "İstanbul Kahve", "prettyName": "istanbul-kahve-b-1c2"}, {"checked": false, "id": "1070", "count": 1, "requestParameter": "1070", "label": "Arko", "prettyName": "arko-b-42e"}, {"checked": false, "id": "531", "count": 1, "requestParameter": "531", "label": "Çerezza", "prettyName": "cerezza-b-213"}, {"checked": false, "id": "3894", "count": 1, "requestParameter": "3894", "label": "Çizmeci Time", "prettyName": "cizmeci-time-b-f36"}, {"checked": false, "id": "7799", "count": 1, "requestParameter": "7799", "label": "Akalp Çiftliği", "prettyName": "akalp-ciftligi-b-1e77"}, {"checked": false, "id": "1815", "count": 1, "requestParameter": "1815", "label": "Danette", "prettyName": "danette-b-717"}, {"checked": false, "id": "7787", "count": 1, "requestParameter": "7787", "label": "Dp Daily Perfection", "prettyName": "dp-daily-perfection-b-1e6b"}, {"checked": false, "id": "7953", "count": 1, "requestParameter": "7953", "label": "Rolling Pops", "prettyName": "rolling-pops-b-1f11"}, {"checked": false, "id": "257", "count": 1, "requestParameter": "257", "label": "Züber", "prettyName": "zuber-b-101"}, {"checked": false, "id": "2561", "count": 1, "requestParameter": "2561", "label": "Arslan", "prettyName": "arslan-b-a01"}, {"checked": false, "id": "5644", "count": 1, "requestParameter": "5644", "label": "Cambu", "prettyName": "cambu-b-160c"}, {"checked": false, "id": "6919", "count": 1, "requestParameter": "6919", "label": "Drancor", "prettyName": "drancor-b-1b07"}, {"checked": false, "id": "610", "count": 1, "requestParameter": "610", "label": "Toblerone", "prettyName": "toblerone-b-262"}, {"checked": false, "id": "117", "count": 1, "requestParameter": "117", "label": "Fiskobirlik", "prettyName": "fiskobirlik-b-75"}, {"checked": false, "id": "767", "count": 1, "requestParameter": "767", "label": "Eker", "prettyName": "eker-b-2ff"}, {"checked": false, "id": "214", "count": 1, "requestParameter": "214", "label": "Beeo", "prettyName": "beeo-b-d6"}, {"checked": false, "id": "1110", "count": 1, "requestParameter": "1110", "label": "Garnier", "prettyName": "garnier-b-456"}, {"checked": false, "id": "8838", "count": 1, "requestParameter": "8838", "label": "Terry's", "prettyName": "terrys-b-2286"}, {"checked": false, "id": "728", "count": 1, "requestParameter": "728", "label": "Tahsildaroğlu", "prettyName": "tahsildaroglu-b-2d8"}, {"checked": false, "id": "7971", "count": 1, "requestParameter": "7971", "label": "Datçam", "prettyName": "datcam-b-1f23"}, {"checked": false, "id": "457", "count": 1, "requestParameter": "457", "label": "Dr.Oetker", "prettyName": "droetker-b-1c9"}, {"checked": false, "id": "7439", "count": 1, "requestParameter": "7439", "label": "Antalya Reçelcisi", "prettyName": "antalya-recelcisi-b-1d0f"}, {"checked": false, "id": "405", "count": 1, "requestParameter": "405", "label": "Hayfene", "prettyName": "hayfene-b-195"}, {"checked": false, "id": "530", "count": 1, "requestParameter": "530", "label": "Cheetos", "prettyName": "cheetos-b-212"}, {"checked": false, "id": "364", "count": 1, "requestParameter": "364", "label": "Humm", "prettyName": "humm-b-16c"}, {"checked": false, "id": "6136", "count": 1, "requestParameter": "6136", "label": "Tony's Chocolonely", "prettyName": "tonys-chocolonely-b-17f8"}, {"checked": false, "id": "497", "count": 1, "requestParameter": "497", "label": "Hero", "prettyName": "hero-b-1f1"}, {"checked": false, "id": "7589", "count": 1, "requestParameter": "7589", "label": "Alpimilk", "prettyName": "alpimilk-b-1da5"}, {"checked": false, "id": "2721", "count": 1, "requestParameter": "2721", "label": "Schogetten", "prettyName": "schogetten-b-aa1"}, {"checked": false, "id": "604", "count": 1, "requestParameter": "604", "label": "Fiorella", "prettyName": "fiorella-b-25c"}, {"checked": false, "id": "9239", "count": 1, "requestParameter": "9239", "label": "Uluova", "prettyName": "uluova-b-2417"}, {"checked": false, "id": "8550", "count": 1, "requestParameter": "8550", "label": "Oatly", "prettyName": "oatly-b-2166"}, {"checked": false, "id": "551", "count": 1, "requestParameter": "551", "label": "Biscolata", "prettyName": "biscolata-b-227"}, {"checked": false, "id": "5279", "count": 1, "requestParameter": "5279", "label": "Bactolac", "prettyName": "bactolac-b-149f"}, {"checked": false, "id": "588", "count": 1, "requestParameter": "588", "label": "Mcvitie's", "prettyName": "mcvities-b-24c"}, {"checked": false, "id": "778", "count": 1, "requestParameter": "778", "label": "Golf", "prettyName": "golf-b-30a"}, {"checked": false, "id": "669", "count": 1, "requestParameter": "669", "label": "Beyoğlu", "prettyName": "beyoglu-b-29d"}, {"checked": false, "id": "847", "count": 1, "requestParameter": "847", "label": "Hacı Şakir", "prettyName": "haci-sakir-b-34f"}, {"checked": false, "id": "1160", "count": 1, "requestParameter": "1160", "label": "Mara", "prettyName": "mara-b-488"}, {"checked": false, "id": "730", "count": 1, "requestParameter": "730", "label": "Sütaş", "prettyName": "sutas-b-2da"}, {"checked": false, "id": "1981", "count": 1, "requestParameter": "1981", "label": "Metro", "prettyName": "metro-b-7bd"}, {"checked": false, "id": "5", "count": 1, "requestParameter": "5", "label": "Orvital", "prettyName": "orvital-b-5"}, {"checked": false, "id": "5636", "count": 1, "requestParameter": "5636", "label": "Crunch", "prettyName": "crunch-b-1604"}, {"checked": false, "id": "5579", "count": 1, "requestParameter": "5579", "label": "Caramio", "prettyName": "caramio-b-15cb"}, {"checked": false, "id": "2048", "count": 1, "requestParameter": "2048", "label": "Reeses", "prettyName": "reeses-b-800"}, {"checked": false, "id": "6858", "count": 1, "requestParameter": "6858", "label": "Rice Up", "prettyName": "rice-up-b-1aca"}, {"checked": false, "id": "8697", "count": 1, "requestParameter": "8697", "label": "Matilde Vicenzi", "prettyName": "matilde-vicenzi-b-21f9"}, {"checked": false, "id": "708", "count": 1, "requestParameter": "708", "label": "Superfresh", "prettyName": "superfresh-b-2c4"}, {"checked": false, "id": "2336", "count": 1, "requestParameter": "2336", "label": "Şut ve Gol", "prettyName": "sut-ve-gol-b-920"}, {"checked": false, "id": "2049", "count": 1, "requestParameter": "2049", "label": "OGX", "prettyName": "ogx-b-801"}, {"checked": false, "id": "631", "count": 1, "requestParameter": "631", "label": "Anavarza", "prettyName": "anavarza-b-277"}, {"checked": false, "id": "2768", "count": 1, "requestParameter": "2768", "label": "Aroy - D", "prettyName": "aroy-d-b-ad0"}]}], "metaData": {"title": "Arama"}, "companyBasedProductRecommendationInfo": {"pageMetaData": {}, "storeProductInfos": [], "sponsored": false}, "postSearchRecommendationInfos": []}}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"""Live tests — hit the real migros.com.tr product-bff API. Cautious: 4 requests, then stop.
|
|
2
|
+
|
|
3
|
+
Run: pytest tests/test_live.py -v
|
|
4
|
+
Skip: pytest -m "not live" (or set MIGROS_SKIP_LIVE=1)
|
|
5
|
+
"""
|
|
6
|
+
import json
|
|
7
|
+
import os
|
|
8
|
+
import pathlib
|
|
9
|
+
import sys
|
|
10
|
+
import time
|
|
11
|
+
import unittest
|
|
12
|
+
|
|
13
|
+
import pytest
|
|
14
|
+
|
|
15
|
+
sys.path.insert(0, str(pathlib.Path(__file__).resolve().parent.parent / "src"))
|
|
16
|
+
|
|
17
|
+
from migros_mcp import http as _http
|
|
18
|
+
from migros_mcp import products as _p
|
|
19
|
+
|
|
20
|
+
pytestmark = pytest.mark.live
|
|
21
|
+
SKIP = os.environ.get("MIGROS_SKIP_LIVE") == "1"
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
@pytest.mark.skipif(SKIP, reason="MIGROS_SKIP_LIVE=1")
|
|
25
|
+
class TestLive(unittest.TestCase):
|
|
26
|
+
def test_search_is_real(self):
|
|
27
|
+
res = _p.parse_search(_http.search_products("süt", 0, "akilli-siralama"), "süt")
|
|
28
|
+
self.assertGreater(res["hit_count"], 100)
|
|
29
|
+
self.assertGreater(len(res["products"]), 10)
|
|
30
|
+
first = res["products"][0]
|
|
31
|
+
self.assertTrue(first["name"])
|
|
32
|
+
self.assertGreater(first["price_tl"], 0)
|
|
33
|
+
print(f"\nLIVE süt: {res['hit_count']} hits, first: {first['name']} "
|
|
34
|
+
f"{first['price_tl']} TL")
|
|
35
|
+
time.sleep(1)
|
|
36
|
+
|
|
37
|
+
def test_product_detail_is_real(self):
|
|
38
|
+
d = _p.parse_product_detail(_http.get_product(20000011010208))
|
|
39
|
+
self.assertEqual(d["name"], "Sütaş Latte 1 L")
|
|
40
|
+
self.assertGreater(d["price_tl"], 0)
|
|
41
|
+
time.sleep(1)
|
|
42
|
+
|
|
43
|
+
def test_categories_are_real(self):
|
|
44
|
+
cats = _p.parse_categories(_http.list_categories())
|
|
45
|
+
self.assertGreaterEqual(len(cats), 10)
|
|
46
|
+
self.assertIn("Tüm İndirimli Ürünler", [c["name"] for c in cats])
|
|
47
|
+
time.sleep(1)
|
|
48
|
+
|
|
49
|
+
def test_discount_sort_returns_discounts(self):
|
|
50
|
+
res = _p.parse_search(_http.search_discounted("süt"), "süt")
|
|
51
|
+
discounted = [p for p in res["products"] if (p.get("money_discount_pct") or 0) > 0]
|
|
52
|
+
self.assertGreater(len(discounted), 0)
|
|
53
|
+
top = max(discounted, key=lambda p: p["money_discount_pct"])
|
|
54
|
+
print(f"\nLIVE top Money discount for süt: {top['name']} "
|
|
55
|
+
f"{top['money_discount_pct']}%")
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
"""Offline tests — parse real captured Migros product-bff JSON, no network."""
|
|
2
|
+
import json
|
|
3
|
+
import pathlib
|
|
4
|
+
import sys
|
|
5
|
+
import unittest
|
|
6
|
+
|
|
7
|
+
sys.path.insert(0, str(pathlib.Path(__file__).resolve().parent.parent / "src"))
|
|
8
|
+
|
|
9
|
+
from migros_mcp import products
|
|
10
|
+
|
|
11
|
+
FIX = pathlib.Path(__file__).resolve().parent / "fixtures"
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class TestParseSearch(unittest.TestCase):
|
|
15
|
+
@classmethod
|
|
16
|
+
def setUpClass(cls):
|
|
17
|
+
payload = json.loads((FIX / "search_sut.json").read_text(encoding="utf-8"))
|
|
18
|
+
cls.parsed = products.parse_search(payload, "sut")
|
|
19
|
+
|
|
20
|
+
def test_hit_count(self):
|
|
21
|
+
self.assertEqual(self.parsed["hit_count"], 371)
|
|
22
|
+
self.assertEqual(self.parsed["query"], "sut")
|
|
23
|
+
|
|
24
|
+
def test_product_count(self):
|
|
25
|
+
self.assertEqual(self.parsed["count"], 5)
|
|
26
|
+
|
|
27
|
+
def test_first_product(self):
|
|
28
|
+
p = self.parsed["products"][0]
|
|
29
|
+
self.assertEqual(p["name"], "Sütaş Latte 1 L")
|
|
30
|
+
self.assertEqual(p["brand"], "Sütaş")
|
|
31
|
+
self.assertEqual(p["price_tl"], 189.00)
|
|
32
|
+
self.assertEqual(p["regular_price_tl"], 189.00)
|
|
33
|
+
self.assertEqual(p["money_discount_pct"], 0)
|
|
34
|
+
self.assertEqual(p["category"], "Uzun Ömürlü Süt")
|
|
35
|
+
self.assertIn("Süt", p["category_path"])
|
|
36
|
+
self.assertTrue(p["url"].startswith("https://www.migros.com.tr/urun/"))
|
|
37
|
+
self.assertTrue((p["image_url"] or "").startswith("https://"))
|
|
38
|
+
|
|
39
|
+
def test_kurus_conversion(self):
|
|
40
|
+
# Torku Uht Süt 1 L: 7500 kuruş -> 75.00 TRY
|
|
41
|
+
p = next(x for x in self.parsed["products"] if x["name"].startswith("Torku"))
|
|
42
|
+
self.assertEqual(p["price_tl"], 75.00)
|
|
43
|
+
|
|
44
|
+
def test_failed_payload(self):
|
|
45
|
+
with self.assertRaises(ValueError):
|
|
46
|
+
products.parse_search({"successful": False, "errorDetail": "boom"}, "x")
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
class TestParseDetail(unittest.TestCase):
|
|
50
|
+
@classmethod
|
|
51
|
+
def setUpClass(cls):
|
|
52
|
+
payload = json.loads((FIX / "product_detail.json").read_text(encoding="utf-8"))
|
|
53
|
+
cls.d = products.parse_product_detail(payload)
|
|
54
|
+
|
|
55
|
+
def test_detail_fields(self):
|
|
56
|
+
self.assertEqual(self.d["name"], "Sütaş Latte 1 L")
|
|
57
|
+
self.assertEqual(self.d["id"], 20000011010208)
|
|
58
|
+
self.assertEqual(self.d["price_tl"], 189.00)
|
|
59
|
+
|
|
60
|
+
def test_description_is_plain_text(self):
|
|
61
|
+
self.assertNotIn("<p>", self.d["description"])
|
|
62
|
+
self.assertIn("İçindekiler", self.d["description"])
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
class TestCategories(unittest.TestCase):
|
|
66
|
+
def test_categories(self):
|
|
67
|
+
payload = json.loads((FIX / "categories.json").read_text(encoding="utf-8"))
|
|
68
|
+
cats = products.parse_categories(payload)
|
|
69
|
+
self.assertEqual(len(cats), 11)
|
|
70
|
+
names = [c["name"] for c in cats]
|
|
71
|
+
self.assertIn("Tüm İndirimli Ürünler", names)
|
|
72
|
+
self.assertIn("Süt, Kahvaltılık", names)
|
|
73
|
+
self.assertTrue(all(c["id"] for c in cats))
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
class TestPriceStats(unittest.TestCase):
|
|
77
|
+
def test_stats(self):
|
|
78
|
+
payload = json.loads((FIX / "search_sut.json").read_text(encoding="utf-8"))
|
|
79
|
+
parsed = products.parse_search(payload, "sut")
|
|
80
|
+
s = products.price_stats(parsed["products"])
|
|
81
|
+
self.assertEqual(s["count"], 5)
|
|
82
|
+
self.assertEqual(s["min_tl"], 52.75)
|
|
83
|
+
self.assertEqual(s["max_tl"], 249.90)
|
|
84
|
+
self.assertEqual(s["median_tl"], 184.90)
|
|
85
|
+
self.assertIn("%3 Yağlı", s["cheapest"]["name"])
|
|
86
|
+
self.assertIn("Kakaolu Süt 9 x", s["priciest"]["name"])
|
|
87
|
+
|
|
88
|
+
def test_empty_stats(self):
|
|
89
|
+
self.assertEqual(products.price_stats([])["count"], 0)
|
|
90
|
+
|
|
91
|
+
def test_sort_map(self):
|
|
92
|
+
self.assertEqual(products.SORTS["discount"], "indirim-yuzdesine-gore")
|
|
93
|
+
self.assertEqual(products.SORTS["price_asc"], "once-en-dusuk-fiyat")
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
if __name__ == "__main__":
|
|
97
|
+
unittest.main()
|