.json çıktının sonundaki html etiketlerini silme
Merhaba,
Elimde sorgu gönderdiğim json çıktısı olan bir sayfa var. Sayfa içeriği json fakat formatı html kalıntıları içeriyor.
Sayfanın sonundaki etiketler şu şekilde: http://prntscr.com/26skp7s
buradan veri alamıyorum. sanırım bu iki etiket yüzünden. sayfanın gerisi tamamen json formatında.
buradaki veriyi alıp kendi json dosyama yazdırıyorum. fakat html ve body etiketleri de geliyor. Bu etiketleri hariç bırakarak json dosyama yazdırmak istiyorum. Bunu nasıl yapabilirim?
Soru hatalı mı? 👎
Eğer sorunun kurallara aykırı olduğunu düşünüyorsanız lütfen bize bildirin!
Cevaplar (6)
Öncelikle datayı sağlayan sitenin bu şekilde yanlış bir json çıktısı vermesi kendi ayıbı, bir hizmet vereceksen doğru düzgün ver.
Çözüme gelirsek basitçe halledelim, siteden veriyi alırken istemediğimiz yazıları silelim ve elimizde ham bir json çıktısı olsun, daha sonra onun üzerinde düzenlemeler yapabiliriz.
$file = file_get_contents('https://site.com/fiyat.php');
// istemediğimiz şeyleri silelim
$file = preg_replace('@</body>\s+</html>@', '', $file);
// Sonra json dosyası şeklinde kaydedelim
file_put_contents (__DIR__ . DIRECTORY_SEPARATOR . 'datas.json', $file);
// Buradan üstteki kısım ayrı bir php dosyasında olsun, belirli aralıklarla bu dosyayı çalıştırıp verileri güncelleyin
// Dosyayı kullanmak istediğinizde çağırın
$file = json_decode(file_get_contents(__DIR__ . DIRECTORY_SEPARATOR . 'datas.json'), true);
// Array içinden verileri istediğiniz gibi kullanabilirsiniz
print_r($file);
Abdullah öncelikle çok çok teşekkür ederim. İstediğim şeyi elde ettim. Birkaç gündür preg_replace deniyorum fakat ('@</body>\s+</html>@' bu şekilde yazmamıştım hiç.
preg_replace('</body>', '', $file); // bu şekilde yazmıştım body etiketi gitsin diye. Sonra aynısını html etiketi için yazmıştım. Ozan arkadaşımızın dediği gibi yaptım ama sonuç alamadım.
küçük bir detay ile oldukça büyük faydan oldu. çok teşekkür ederim.
diğer arkadaşlara da çok teşekkür ederim.
Yanıt için teşekkür ederim
$data değişkenini array belirterek ya da belirtmeyerek yazdırdığımda boş sayfa geliyor herhangi bir değer gelmiyor.
kod şu şekilde;
$file = file_get_contents('https://site.com/fiyat.php');
$data = json_decode($file, true); //gelen veriyi array e çevir
echo $data;
Şu şekilde çıktı alırsam önceki mesajlardaki json'umsu çıktı geliyor. Sonunda yine </html> ve </body> etiketleri mevcut. Kaynak kodlarına bakınca görüyorsunuz etiketleri.
$file = file_get_contents('https://site.com/fiyat.php');
file_put_contents (__DIR__ . DIRECTORY_SEPARATOR . 'datas.json', $file);
echo $file;
Bu arada yardımcı olmaya çalışanlara teşekkür ederim. Hem öğrenmeye çalışıyorum bu yüzden ısrarcıyım. Hem de hazıra konmamak için önce defalarca sitede araştırma yapıyorum, deniyorum tekrar tekrar.
$data = json_decode($file, true); //gelen veriyi array e çevir
echo $data['data']['ALTIN']['alis'];
Öncelikle yanıt için çok teşekkür ederim.
Bu konuda yaptığım araştırmaların tamamı str_teplace ve preg_replace ile çözülür diyor senin de dediğin gibi.
Ben şu şekilde deniyorum:
$file = file_get_contents('http://prntscr.com/26subcm'); //veriyi çektiğim yerdeki durum linkte
echo $file['ALTIN']['alis']; // çıktıda sadece bu var : http://prntscr.com/26sudlg
echo $file; // bu şekilde denersem aşağıdaki kaynak kodu gibi yazdırıyor. json görünümlü HTML sanırım. Sondaki etiketleri silsem buradaki veriyle işlem yapabileceğim ama oradaki html body sanırım işi bozuyor.
aşağıdaki çıktıyı bir .html dosyasına yazdırıp o dosya üzerinden file_get_contents ile replace etmeye çalışır ve sonuç alırsanız çözüme kavuşmuş olurum.
verinin geldiği sayfanın kaynak kodu ise şu şekilde:
{"meta":{"time":1644481669858,"time_formatted":"","fiyat_yayini":"web_socket","fiyat_guncelleme":2000},"data":{"USDTRY":{"code":"USDTRY","alis":"13.5360","satis":"13.5520","tarih":"10-02-2022 11:27:49","dir":{"alis_dir":"","satis_dir":""},"dusuk":13.533,"yuksek":13.604,"kapanis":13.518},"ALTIN":{"code":"ALTIN","alis":"798.410","satis":"800.470","tarih":"10-02-2022 11:27:49","dir":{"alis_dir":"","satis_dir":""},"dusuk":"800.370","yuksek":804.53,"kapanis":797.1},"OMRUSD":{"code":"OMRUSD","alis":2.503,"satis":2.583,"tarih":"10-02-2022 11:15:01","dir":{"alis_dir":"up","satis_dir":"up"},"dusuk":2.583,"yuksek":2.583,"kapanis":2.503},"USDPURE":{"code":"USDPURE","alis":"58980.0000","satis":"59070.0000","tarih":"10-02-2022 11:27:44","dir":{"alis_dir":"","satis_dir":""},"dusuk":59040,"yuksek":59180,"kapanis":58960},"EURTRY":{"code":"EURTRY","alis":"15.4460","satis":"15.4880","tarih":"10-02-2022 11:27:47","dir":{"alis_dir":"down","satis_dir":""},"dusuk":15.453,"yuksek":15.542,"kapanis":15.42},"ONS":{"code":"ONS","alis":"1832.30","satis":"1832.60","tarih":"10-02-2022 11:27:44","dir":{"alis_dir":"","satis_dir":"down"},"dusuk":1831.8,"yuksek":1836,"kapanis":1833},"USDRUB":{"code":"USDRUB","alis":"74.2160","satis":"76.7360","tarih":"10-02-2022 11:27:49","dir":{"alis_dir":"","satis_dir":""},"dusuk":76.63,"yuksek":76.823,"kapanis":74.107},"EURUSD":{"code":"EURUSD","alis":1.1411,"satis":1.1428,"tarih":"10-02-2022 11:27:47","dir":{"alis_dir":"down","satis_dir":""},"dusuk":1.1411,"yuksek":1.1433,"kapanis":1.1407},"USDKG":{"code":"USDKG","alis":"58690.0","satis":"58770.0","tarih":"10-02-2022 11:27:44","dir":{"alis_dir":"","satis_dir":""},"dusuk":58740,"yuksek":58880,"kapanis":58670},"USDBGN":{"code":"USDBGN","alis":1.4628,"satis":1.9628,"tarih":"10-02-2022 11:15:01","dir":{"alis_dir":"up","satis_dir":"up"},"dusuk":1.9628,"yuksek":1.9628,"kapanis":1.4628},"EURKG":{"code":"EURKG","alis":51360,"satis":51500,"tarih":"10-02-2022 11:27:47","dir":{"alis_dir":"","satis_dir":""},"dusuk":51490,"yuksek":51630,"kapanis":51370},"JPYTRY":{"code":"JPYTRY","alis":0.1161,"satis":0.1169,"tarih":"10-02-2022 11:27:49","dir":{"alis_dir":"","satis_dir":""},"dusuk":0.1167,"yuksek":0.1174,"kapanis":0.116},"AEDUSD":{"code":"AEDUSD","alis":"0.2650","satis":"0.2750","tarih":"10-02-2022 11:15:01","dir":{"alis_dir":"up","satis_dir":"up"},"dusuk":0.275,"yuksek":0.275,"kapanis":0.265},"AYAR14":{"code":"AYAR14","alis":"437.110","satis":"525.310","tarih":"10-02-2022 11:27:49","dir":{"alis_dir":"","satis_dir":""},"dusuk":"525.240","yuksek":527.94,"kapanis":436.38},"GBPTRY":{"code":"GBPTRY","alis":18.265,"satis":18.353,"tarih":"10-02-2022 11:27:49","dir":{"alis_dir":"","satis_dir":""},"dusuk":18.306,"yuksek":18.394,"kapanis":18.221},"KWDUSD":{"code":"KWDUSD","alis":"3.2290","satis":"3.2790","tarih":"10-02-2022 11:15:01","dir":{"alis_dir":"up","satis_dir":"up"},"dusuk":3.279,"yuksek":3.279,"kapanis":3.229},"AYAR22":{"code":"AYAR22","alis":"724.550","satis":"744.950","tarih":"10-02-2022 11:27:49","dir":{"alis_dir":"","satis_dir":""},"dusuk":"744.850","yuksek":748.8,"kapanis":723.36},"DKKTRY":{"code":"DKKTRY","alis":2.047,"satis":2.091,"tarih":"10-02-2022 11:27:49","dir":{"alis_dir":"","satis_dir":""},"dusuk":2.086,"yuksek":2.099,"kapanis":2.044},"USDILS":{"code":"USDILS","alis":"3.4020","satis":"3.4720","tarih":"10-02-2022 11:15:01","dir":{"alis_dir":"up","satis_dir":"up"},"dusuk":3.472,"yuksek":3.472,"kapanis":3.402},"SEKTRY":{"code":"SEKTRY","alis":1.466,"satis":1.486,"tarih":"10-02-2022 11:27:49","dir":{"alis_dir":"","satis_dir":""},"dusuk":1.48,"yuksek":1.488,"kapanis":1.463},"USDMAD":{"code":"USDMAD","alis":"9.1030","satis":"9.6750","tarih":"10-02-2022 11:15:01","dir":{"alis_dir":"up","satis_dir":"up"},"dusuk":9.675,"yuksek":9.675,"kapanis":9.103},"KULCEALTIN":{"code":"KULCEALTIN","alis":794.42,"satis":802.87,"tarih":"10-02-2022 11:27:49","dir":{"alis_dir":"","satis_dir":""},"dusuk":802.77,"yuksek":806.94,"kapanis":793.11},"NOKTRY":{"code":"NOKTRY","alis":1.519,"satis":1.529,"tarih":"10-02-2022 11:27:49","dir":{"alis_dir":"","satis_dir":""},"dusuk":1.523,"yuksek":1.531,"kapanis":1.517},"USDQAR":{"code":"USDQAR","alis":3.891,"satis":3.991,"tarih":"10-02-2022 11:15:01","dir":{"alis_dir":"up","satis_dir":"up"},"dusuk":3.991,"yuksek":3.991,"kapanis":3.891},"XAUXAG":{"code":"XAUXAG","alis":78.43,"satis":78.49,"tarih":"10-02-2022 11:27:49","dir":{"alis_dir":"","satis_dir":""},"dusuk":78.45,"yuksek":79.11,"kapanis":78.66},"CEYREK_YENI":{"code":"CEYREK_YENI","alis":1297,"satis":1314,"tarih":"10-02-2022 11:27:49","dir":{"alis_dir":"","satis_dir":""},"dusuk":1314,"yuksek":1320,"kapanis":1295},"CHFTRY":{"code":"CHFTRY","alis":14.555,"satis":14.635,"tarih":"10-02-2022 11:27:49","dir":{"alis_dir":"","satis_dir":""},"dusuk":14.614,"yuksek":14.691,"kapanis":14.535},"JODUSD":{"code":"JODUSD","alis":1.306,"satis":1.406,"tarih":"10-02-2022 11:15:01","dir":{"alis_dir":"up","satis_dir":"up"},"dusuk":1.406,"yuksek":1.406,"kapanis":1.306},"CEYREK_ESKI":{"code":"CEYREK_ESKI","alis":1292,"satis":1306,"tarih":"10-02-2022 11:27:49","dir":{"alis_dir":"","satis_dir":""},"dusuk":1306,"yuksek":1312,"kapanis":1290},"AUDTRY":{"code":"AUDTRY","alis":9.558,"satis":9.705,"tarih":"10-02-2022 11:27:49","dir":{"alis_dir":"","satis_dir":""},"dusuk":9.674,"yuksek":9.721,"kapanis":9.531},"JODTRY":{"code":"JODTRY","alis":18.3283,"satis":19.0783,"tarih":"10-02-2022 11:27:49","dir":{"alis_dir":"down","satis_dir":"down"},"dusuk":19.0388,"yuksek":19.1148,"kapanis":18.33},"CADTRY":{"code":"CADTRY","alis":10.58,"satis":10.669,"tarih":"10-02-2022 11:27:49","dir":{"alis_dir":"","satis_dir":""},"dusuk":10.654,"yuksek":10.71,"kapanis":10.567},"YARIM_YENI":{"code":"YARIM_YENI","alis":2603,"satis":2628,"tarih":"10-02-2022 11:27:49","dir":{"alis_dir":"","satis_dir":""},"dusuk":2627,"yuksek":2641,"kapanis":2599},"OMRTRY":{"code":"OMRTRY","alis":34.3822,"satis":34.8822,"tarih":"10-02-2022 11:27:49","dir":{"alis_dir":"down","satis_dir":"down"},"dusuk":34.8094,"yuksek":34.9495,"kapanis":34.3853},"SARTRY":{"code":"SARTRY","alis":3.539,"satis":3.604,"tarih":"10-02-2022 11:27:49","dir":{"alis_dir":"","satis_dir":""},"dusuk":3.599,"yuksek":3.618,"kapanis":3.534},"USDCHF":{"code":"USDCHF","alis":"0.9260","satis":"0.9300","tarih":"10-02-2022 11:23:59","dir":{"alis_dir":"up","satis_dir":""},"dusuk":0.929,"yuksek":0.931,"kapanis":0.926},"YARIM_ESKI":{"code":"YARIM_ESKI","alis":2563,"satis":2588,"tarih":"10-02-2022 11:27:49","dir":{"alis_dir":"","satis_dir":""},"dusuk":2587,"yuksek":2601,"kapanis":2559},"AUDUSD":{"code":"AUDUSD","alis":"0.7060","satis":"0.7160","tarih":"10-02-2022 11:27:39","dir":{"alis_dir":"","satis_dir":""},"dusuk":0.713,"yuksek":0.716,"kapanis":0.705},"TEK_YENI":{"code":"TEK_YENI","alis":5190,"satis":5235,"tarih":"10-02-2022 11:27:49","dir":{"alis_dir":"","satis_dir":""},"dusuk":5234,"yuksek":5262,"kapanis":5181},"RUBTRY":{"code":"RUBTRY","alis":"0.1760","satis":"0.1830","tarih":"10-02-2022 11:27:49","dir":{"alis_dir":"","satis_dir":""},"dusuk":0.182,"yuksek":0.184,"kapanis":0.176},"USDCAD":{"code":"USDCAD","alis":"1.2700","satis":"1.2790","tarih":"10-02-2022 11:27:11","dir":{"alis_dir":"","satis_dir":""},"dusuk":1.279,"yuksek":1.281,"kapanis":1.27},"TEK_ESKI":{"code":"TEK_ESKI","alis":5142,"satis":5183,"tarih":"10-02-2022 11:27:49","dir":{"alis_dir":"","satis_dir":""},"dusuk":5182,"yuksek":5209,"kapanis":5133},"BGNTRY":{"code":"BGNTRY","alis":"7.6810","satis":"7.9810","tarih":"10-02-2022 11:27:49","dir":{"alis_dir":"","satis_dir":""},"dusuk":7.417,"yuksek":7.986,"kapanis":7.178},"USDDKK":{"code":"USDDKK","alis":"6.4810","satis":"6.6130","tarih":"10-02-2022 11:27:48","dir":{"alis_dir":"","satis_dir":"up"},"dusuk":6.61,"yuksek":6.622,"kapanis":6.483},"ATA_YENI":{"code":"ATA_YENI","alis":5329,"satis":5371,"tarih":"10-02-2022 11:27:49","dir":{"alis_dir":"","satis_dir":""},"dusuk":5371,"yuksek":5398,"kapanis":5321},"AEDTRY":{"code":"AEDTRY","alis":3.5974,"satis":3.6974,"tarih":"10-02-2022 11:27:49","dir":{"alis_dir":"","satis_dir":""},"dusuk":3.6898,"yuksek":3.7045,"kapanis":3.5977},"USDSAR":{"code":"USDSAR","alis":"3.7600","satis":"3.8250","tarih":"10-02-2022 11:15:01","dir":{"alis_dir":"up","satis_dir":"up"},"dusuk":3.825,"yuksek":3.825,"kapanis":3.76},"ATA_ESKI":{"code":"ATA_ESKI","alis":5325,"satis":5367,"tarih":"10-02-2022 11:27:49","dir":{"alis_dir":"","satis_dir":""},"dusuk":5367,"yuksek":5394,"kapanis":5317},"QARTRY":{"code":"QARTRY","alis":3.5849,"satis":3.6549,"tarih":"10-02-2022 11:27:49","dir":{"alis_dir":"","satis_dir":""},"dusuk":3.6472,"yuksek":3.662,"kapanis":3.5852},"USDSEK":{"code":"USDSEK","alis":"9.1550","satis":"9.2000","tarih":"10-02-2022 11:27:47","dir":{"alis_dir":"","satis_dir":""},"dusuk":"9.1850","yuksek":9.248,"kapanis":9.172},"ATA5_YENI":{"code":"ATA5_YENI","alis":26547,"satis":26746,"tarih":"10-02-2022 11:27:49","dir":{"alis_dir":"","satis_dir":""},"dusuk":26742,"yuksek":26881,"kapanis":26504},"CNYTRY":{"code":"CNYTRY","alis":"2.0420","satis":"2.0570","tarih":"10-02-2022 11:27:49","dir":{"alis_dir":"","satis_dir":""},"dusuk":2.053,"yuksek":2.061,"kapanis":2.042},"USDJPY":{"code":"USDJPY","alis":"115.89300","satis":"116.60300","tarih":"10-02-2022 11:27:48","dir":{"alis_dir":"up","satis_dir":"up"},"dusuk":116.491,"yuksek":116.709,"kapanis":115.824},"ATA5_ESKI":{"code":"ATA5_ESKI","alis":26507,"satis":26706,"tarih":"10-02-2022 11:27:49","dir":{"alis_dir":"","satis_dir":""},"dusuk":26702,"yuksek":26841,"kapanis":26464},"USDNOK":{"code":"USDNOK","alis":"8.8580","satis":"8.9180","tarih":"10-02-2022 11:27:49","dir":{"alis_dir":"","satis_dir":""},"dusuk":8.907,"yuksek":8.947,"kapanis":8.868},"GREMESE_YENI":{"code":"GREMESE_YENI","alis":12934,"satis":13098,"tarih":"10-02-2022 11:27:49","dir":{"alis_dir":"","satis_dir":""},"dusuk":13096,"yuksek":13164,"kapanis":12913},"GBPUSD":{"code":"GBPUSD","alis":"1.3490","satis":"1.3540","tarih":"10-02-2022 11:27:11","dir":{"alis_dir":"","satis_dir":""},"dusuk":1.352,"yuksek":"1.3550","kapanis":1.348},"GREMESE_ESKI":{"code":"GREMESE_ESKI","alis":12854,"satis":13018,"tarih":"10-02-2022 11:27:49","dir":{"alis_dir":"","satis_dir":""},"dusuk":13016,"yuksek":13083,"kapanis":12833},"GUMUSTRY":{"code":"GUMUSTRY","alis":10.138,"satis":10.441,"tarih":"10-02-2022 11:27:49","dir":{"alis_dir":"","satis_dir":""},"dusuk":10.392,"yuksek":10.458,"kapanis":10.099},"KWDTRY":{"code":"KWDTRY","alis":43.2153,"satis":45.2153,"tarih":"10-02-2022 11:27:49","dir":{"alis_dir":"down","satis_dir":"down"},"dusuk":45.1226,"yuksek":45.3009,"kapanis":43.2191},"ILSTRY":{"code":"ILSTRY","alis":4.1451,"satis":4.1551,"tarih":"10-02-2022 11:27:49","dir":{"alis_dir":"","satis_dir":""},"dusuk":4.1464,"yuksek":4.1631,"kapanis":4.1454},"XAGUSD":{"code":"XAGUSD","alis":23.35,"satis":23.36,"tarih":"10-02-2022 11:27:49","dir":{"alis_dir":"","satis_dir":""},"dusuk":23.2,"yuksek":23.41,"kapanis":23.29},"GUMUSUSD":{"code":"GUMUSUSD","alis":749,"satis":770,"tarih":"10-02-2022 11:27:48","dir":{"alis_dir":"","satis_dir":""},"dusuk":765,"yuksek":772,"kapanis":747},"MADTRY":{"code":"MADTRY","alis":1.5091,"satis":1.5141,"tarih":"10-02-2022 11:27:49","dir":{"alis_dir":"","satis_dir":""},"dusuk":1.5109,"yuksek":1.5169,"kapanis":1.5091},"XPTUSD":{"code":"XPTUSD","alis":1033,"satis":1036,"tarih":"10-02-2022 11:27:48","dir":{"alis_dir":"","satis_dir":""},"dusuk":1034,"yuksek":1041,"kapanis":1036},"XPDUSD":{"code":"XPDUSD","alis":2287,"satis":2296,"tarih":"10-02-2022 11:27:44","dir":{"alis_dir":"","satis_dir":""},"dusuk":2282,"yuksek":2298,"kapanis":2280},"PLATIN":{"code":"PLATIN","alis":28220,"satis":33300,"tarih":"10-02-2022 11:27:48","dir":{"alis_dir":"up","satis_dir":""},"dusuk":33250,"yuksek":33460,"kapanis":28320},"PALADYUM":{"code":"PALADYUM","alis":63530,"satis":73830,"tarih":"10-02-2022 11:27:44","dir":{"alis_dir":"","satis_dir":""},"dusuk":73350,"yuksek":73870,"kapanis":63300}}}</body>
</html>
$gelenveri = str_replace('</body>',' ',$gelenveri);
$gelenveri = str_replace('</html>',' ',$gelenveri);
ilk bölümdeki kodu bulur. ikinci bölümdeki ile değiştirir.
https://www.php.net/manual/tr/function.str-replace.php
$gelenveri = trim($gelenveri) // Tüm boşlukları temizler.
https://www.php.net/manual/tr/function.trim.php
Json verisini gönderen sayfa da senin kontrolünde ise onu da eklersen bunlara gerek kalmadan oradan da çözebiliriz yüksek ihtimalle.