Türkiye'nin En Eski Webmaster Forumu İyinet'e Hoşgeldiniz!

Kayıt Ol

Curl ile Alınan İçerikte Array Problemi

OsmanAtabey

0
Onaylı Üye
Üye
Katılım
26 Mart 2005
Mesajlar
922
Açılan Konu
52
Tepki puanı
4
Selam

PHP:
$al = curl_init();
            curl_setopt($al, CURLOPT_URL ,"domainismi");
            curl_setopt($al, CURLOPT_RETURNTRANSFER,1);
            curl_setopt($al, CURLOPT_USERAGENT, 'Firefox / 2.0');
            curl_setopt($al, CURLOPT_REFERER,"domainismi");
            curl_setopt($al, CURLOPT_FOLLOWLOCATION,1);
            $icerik = curl_exec($al);
            curl_close($al);

echo $icerik;  ( Bu bölüm tek başına sorunsuz çalışıyor. Tüm sayfa içeriğini alıyor )

Fakat yukarıdaki $içerik bölümünü kapadığımda ve aşağıdaki 2 satırı açtığımda herhangi bir veri gelmiyor ve çıktı olarak sadece Array ekrana basılıyor.

preg_match_all('#<body>(.*?)<\/body>#si', $icerik, $parca);
echo $parca;

PHP:
print_r ($parca); // çıktısı ise aşağıdaki gibi

Array
(
    [0] => Array
        (
        )

    [1] => Array
        (
        )

)

Sorun nerede olabilir ?
 

peep

0
Onaylı Üye
Üye
Katılım
20 Mayıs 2007
Mesajlar
6,383
Açılan Konu
417
Tepki puanı
85
PHP:
echo $parca[1];
 

OsmanAtabey

0
Onaylı Üye
Üye
Katılım
26 Mart 2005
Mesajlar
922
Açılan Konu
52
Tepki puanı
4
peep zaten print_r her array içindeki göstermiyor mu ?

PHP:
echo $parca[1]; // çıktısı boş geliyor
print_r ($parca[1]); // çıktısı aşağıdaki gibi

Array
(
)

preg_match_all bölümünde aşağıdaki gibi değişiklik yaptığımda verileri sorunsuz alıyor fakat bana div içindekiler lazım olmadığı için bir işime yaramıyor.

PHP:
preg_match_all('#<div>(.*?)<\/div>#si', $icerik, $parca);
 

OsmanAtabey

0
Onaylı Üye
Üye
Katılım
26 Mart 2005
Mesajlar
922
Açılan Konu
52
Tepki puanı
4
Yukarıda sorduğum almak istediğim ilk veriyi preg_match_all ile ayrıştıramadım ve mecburen tüm sayfa içeriğini bir dosyaya aldım.

Daha sonra o dosyayı başka bir kod ile ayrıştırarak curl fonksiyonunu entegre ettim ve çalışmasını sağladım.

Esas kod açısından şanslıymışım ki curl kodu ve preg_match_all herhangi bir problem çıkarmadı ve ilgili yerleri ayırarak sorunsuz bir şekilde verileri aldı.

Fakat ilk veriyi istediğim gibi parçalamamasının sebebini henüz bulamadım.
 

Ntie

0
Onaylı Üye
Üye
Katılım
13 Ocak 2007
Mesajlar
0
Açılan Konu
20
Tepki puanı
0
preg_match_all çoklu veri çekimleri içindir.
Siz burada tek veri çekiyorsunuz bunun için preg_match kullanmalısınız bu sayede sorununuz düzelecektir.
 

OsmanAtabey

0
Onaylı Üye
Üye
Katılım
26 Mart 2005
Mesajlar
922
Açılan Konu
52
Tepki puanı
4
Ntie yaptığım işlemde çoklu veri çekiyorum bir döngü ile birlikte. O yüzden preg_match_all kullanıyorum. Ayrıca curl kullanma sebebim ilgili sitenin file_get_contents, fopen ve get_headers() gibi fonksiyonlara önlem aldığı içindir.
 

Ntie

0
Onaylı Üye
Üye
Katılım
13 Ocak 2007
Mesajlar
0
Açılan Konu
20
Tepki puanı
0
Kodu pm'den gönderirsen yapıp veriyim.
 

OsmanAtabey

0
Onaylı Üye
Üye
Katılım
26 Mart 2005
Mesajlar
922
Açılan Konu
52
Tepki puanı
4
Şu an sorunsuz bir biçimde çalışıyor sadece ilk veri çekiminde ve ayrıştırmada sorun yaşıyorum.Yukarıda örnek verdim div içindekileri ayırıyor fakat istediğim bölümlerde array boş dönüyor. Bunun diğer ana kod ile alakası yok zaten.

Kısacası işlem şu şekilde : Konuların ve konulara ait olan linklerin olduğu sayfa var. Bu sayfanın ilgili kısmı alınıyor ve diğer ana koda aktarılıyor, bu kod tüm linklere sırasıyla girip linke ait ne içerik varsa alıyor ve veritabanına ekliyor.
 

*siber*

0
Onaylı Üye
Üye
Katılım
20 Temmuz 2005
Mesajlar
2,014
Açılan Konu
108
Tepki puanı
1
Konum
about:blank
for($i=0;$i<count($parca[1]);$i++){echo $parca[1][$i].'<br>';}
 

OsmanAtabey

0
Onaylı Üye
Üye
Katılım
26 Mart 2005
Mesajlar
922
Açılan Konu
52
Tepki puanı
4
*siber* verdiğin for döngüsüyle konunun hiçbir alakası yok.
 

*siber*

0
Onaylı Üye
Üye
Katılım
20 Temmuz 2005
Mesajlar
2,014
Açılan Konu
108
Tepki puanı
1
Konum
about:blank
evet verdiğim örneğin for ile ne alakası var ? echo içine bak istersen ? $parca[1][$i]

preg_match_all ile çalışıyorsan for kullanman kaçılmazdır aslında. Yani verilerinin array e düşmemesini istiyorsan, $veri[1][parca] şeklinde çekmen gerek.

Yani ilk örneğinde verdiğin kullanım şekline örnek olarak echo $parca[1][5] sana sadece 5. parçayı verir.
 

OsmanAtabey

0
Onaylı Üye
Üye
Katılım
26 Mart 2005
Mesajlar
922
Açılan Konu
52
Tepki puanı
4
Evet bu döngü ana kod içinde mevcut fakat açtığım konu bununla ilgili değildi.

Benim sorduğum şey curl kodu ile çektiğim verinin <div> tagları arasındaki veriyi alabiliyorken <body> tagları arasındakini alamamamdı.

Bu döngüyü boş bir array elde ederken kullanmak zaten yanlış fakat veriyi aldıktan sonra gereken bir döngü.

Herneyse soruna çözüm bulduğumda buraya yazarım ...
 

*siber*

0
Onaylı Üye
Üye
Katılım
20 Temmuz 2005
Mesajlar
2,014
Açılan Konu
108
Tepki puanı
1
Konum
about:blank
Almak istediğin metini buraya yazarsan daha kolay çözüme ulaşırız :)
 

OsmanAtabey

0
Onaylı Üye
Üye
Katılım
26 Mart 2005
Mesajlar
922
Açılan Konu
52
Tepki puanı
4
Metin değilde dinamik bir site ve o siteyi şu an için veremiyorum :) O yüzden burada sordum ki belki dedim daha önceden böyle bir sorunla karşılaşmış olan vardır ve bir çözüm bulmuştur.

Şu anda kendi çapımda bir proje yapıyorum ve bu konuda nerde hata var diye pek detaylı inceleyemedim.İşim bittiğinde detaylı bakıcam artık.
 

Invictus

0
Onaylı Üye
Üye
Katılım
4 Şubat 2010
Mesajlar
328
Açılan Konu
5
Tepki puanı
8
Konum
istanbul
Selam

PHP:
$al = curl_init();
            curl_setopt($al, CURLOPT_URL ,"domainismi");
            curl_setopt($al, CURLOPT_RETURNTRANSFER,1);
            curl_setopt($al, CURLOPT_USERAGENT, 'Firefox / 2.0');
            curl_setopt($al, CURLOPT_REFERER,"domainismi");
            curl_setopt($al, CURLOPT_FOLLOWLOCATION,1);
            $icerik = curl_exec($al);
            curl_close($al);

echo $icerik;  ( Bu bölüm tek başına sorunsuz çalışıyor. Tüm sayfa içeriğini alıyor )

Fakat yukarıdaki $içerik bölümünü kapadığımda ve aşağıdaki 2 satırı açtığımda herhangi bir veri gelmiyor ve çıktı olarak sadece Array ekrana basılıyor.

preg_match_all('#<body>(.*?)<\/body>#si', $icerik, $parca);
echo $parca;

PHP:
print_r ($parca); // çıktısı ise aşağıdaki gibi

Array
(
    [0] => Array
        (
        )

    [1] => Array
        (
        )

)

Sorun nerede olabilir ?

belki body tagının içinde bgcolor falan vardır, yabi <body bgcolor=" "> olduğu için eşleşmiyordur. yanlış anlama bazen bu kadar basit şeyler gözden kaçıyor.

yok direk <body> ve </body> sayfada var diyorsan

PHP:
preg_match_all('#<body>(.*?)<\/body>#si', $icerik, $parca);
echo $parca[1][0];
// ya da
echo $parca[1][1];

o da olmazsa

PHP:
preg_match('#<body>(.*?)<\/body>#si', $icerik, $parca);
echo $parca[1];

dene. çünkü içerik tüm sayfayı ekrana bastırdığına göre artık veri $icerik değişkeninde, curl den geçti.
 
Üst