- Düzenlendi
Aşağıdaki kodlara sahibim. Bir veritabanından kayıtlı url leri cekıyorum. örnekhttps://wordpres.com.tr/category/seo/feed)
Bu sayfalar xml (rss feed) categori sayfaları. Bu sayfalardaki konu başlığı ve linkini alıyorum, veritabanıma ekliyorum.
@mgsmus beyefendi sayesinde kodum çok güzel çalışıyor.
Sıkıntım şu, çektiğim başlık ve urlelerden birisi daha önce kaydedildiyse, doğal olarak kaydetmesin istiyorum. Bunun için
$date= $article->pubDate;
$sontarih = DB::table('bot')
->latest('created_at')->first();
if($date < $sontarih->created_at){.
bu şekilde bir yaklaşımda bulundum. Ama hiç kayıt yoksa hata veriyor. kayıt varsada doğru çalıştığına dair süpheliyim.
Bir diğer kafama takılan şey ise bir sayfa artık yoksa, yani 404 cevirirse ne olacak. o sayfayı atlar devam mı eder. hata verip tüm işlem başarısızmı olur. Başarısız oluyorsa bunun için ne yapmam lazım.
KODUN TAMAMI :
->toArray();
$client = new Client();
$promises = (function () use ($urls, $client) {
foreach ($urls as $url) {
yield $client->getAsync($url,[ 'http_errors' => false ], [ 'timeout' => 300 ]);
}
})();
(new EachPromise($promises, [
'concurrency' => 10,
'fulfilled' => function (ResponseInterface $response, int $index) {
$index = $response->getBody()->getContents();
$feed = simplexml_load_string($index);
foreach ($feed->channel->item as $article) {
$date= $article->pubDate;
$sontarih = DB::table('bot')
->latest('created_at')->first();
if($date < $sontarih->created_at){
DB::table('bot')->insert([
'baslik' => $article->title,
'url' => $article->link,
'created_at' => Carbon::now(),
'updated_at' => Carbon::now()
]);
}
}
}
]))->promise()->wait();```