Laravel Türkiye Discord Kanalı Forumda kod paylaşılırken dikkat edilmesi gerekenler!Birlikte proje geliştirmek ister misiniz?

aşağıdaki kodla hatayı yakalıyorum , ama ne yaptıysam yapayım url yi alamıyorum.

 if ($response->clientError()) {
 return Http::post($item->katlink)->throw(function (Response $response, \Illuminate\Http\Client\RequestException $e) {
 dd($response->transferStats->gethandlerStats());

    Baya uğrastim, yeterli kaynak çok az, belki bir gün bir arkadaşın işine yarar. aşağıdaki şekilde hatayı yakalayıp url yi aldım.

     if ($response->clientError()) {
                                return Http::post($item->katlink)->throw(function (Response $response, \Illuminate\Http\Client\RequestException $e) {
    
                                    $hata1 = [$e, $response->transferStats->gethandlerStats()];
    
                                    $sil = $hata1[1];
    
                                    if($hata1){
                                        $deleted = Feed::where('katlink', $sil)->delete();
                                        }
                                });
                            }

      aeneas Şöyle yapsanız olmuyor muydu:

      $r = Http::post($item->katlink);
      
      if($r->failed()) {
          Feed::where('katlink', $item->katlink)
              ->delete();
      }

        mgsmus Hocam daha iyi çalıştı 🙂 eskiden tek tek siliyordu, şimdi hatalıların hepsini toplu siliyor. Ne http client belgelerinde nede guzzle belgelerinde nede googledan buldugum sonuclarda bahsetmıyordu boyle bir koddan, bu kadar basit olabileceğini düşümmemiştim, harikasınız.
        Hocam bir ricam daha olacak mümkünse, hatalıları siliyorum ama failed verdiğinden orda kalıyor, sildikten sonra başa veya kaldıgı yerden nasıl devam ettiririm.

          aeneas Tam anlamadım ama döngü içinde yapacaksınız.

          hatayı yakaladıgımda , hatalı linki siliyorum ama zamanlanmış görev failed veriyor. hata olmasaydı feed sayfalarından veri cekicekti. ama failed verince , o verileri cekmiyor. ben hatalı linkleri sildikten sonra o verileride ceksin istiyorum. tam kodum aşağıda hocam.
          Bu arada tüm kodu, parça parça siz yazdınız hocam 🙂

           $schedule->call(function () {
          
                      libxml_use_internal_errors(true);
                      $urls = DB::table('feed')
                          ->get();
                      $responses = Http::pool(function (Pool $pool) use ($urls) {
                          foreach ($urls as $item) {
                              $alias = $item->site_id . '|' . $item->katlink . '|' . $item->kategori. '|' . $item->user_id;
                              try {
                                  $response = Http::timeout(3)
                                  ->get($item->katlink);
          
                                  if ($response->clientError()) {
                                      $r = Http::post($item->katlink);
          
                                      if($r->failed()) {
                                          Feed::where('katlink', $item->katlink)
                                              ->delete();
                                      }
                                  }
                                  if ($response->serverError()) {
                                      return Http::post($item->katlink)->throw(function (Response $response, \Illuminate\Http\Client\RequestException $e) {
                                          $hata2 = [$e, $response->transferStats->gethandlerStats()];
                                          $sil = $hata2[1];
          
                                          if($hata2){
                                              $deleted = Feed::where('katlink', $sil)->delete();
          
                                              }
                                      });
                                  }
                              } catch(\Illuminate\Http\Client\ConnectionException $e) {
                                  $hatasil = [$e ,$item->katlink];
                              $sil = $hatasil[1];
                                  if($hatasil){
                                      $deleted = Feed::where('katlink', $sil)->delete();
                                      }
                          }
                              $requests[] = $pool->as($alias)
                                  ->get($item->katlink);
                          }
                          return $requests;
                      });
          
                      foreach ($responses as $alias => $response) {
                          $site_id = explode('|', $alias)[0];
                          $user_id = explode('|', $alias)[3];
                          $kategori = explode('|', $alias)[2];
                              $feed = simplexml_load_string($response->body());
                               foreach ($feed->channel->item as $article) {
                              $img =  $article->description;
                               if (preg_match( '|<img.*?src=[\'"](.*?)[\'"].*?>|i', $img, $matches)) {
                               $src = $matches[ 1 ];
                               DB::table('bot')->insertOrIgnore([
                                  'site_id' => $site_id,
                                  'user_id' => $user_id,
                                  'kategori' => $kategori,
                                  'baslik' => $article->title,
                                  'url' => $article->link,
                                  'image' => $src,
                                  'created_at' => Carbon::now(),
                                  'updated_at' => Carbon::now()
                              ]);
                              }else{
                              DB::table('bot')->insertOrIgnore([
                                  'site_id' => $site_id,
                                  'user_id' => $user_id,
                                  'kategori' => $kategori,
                                  'baslik' => $article->title,
                                  'url' => $article->link,
                                  'image' => $src,
                                  'created_at' => Carbon::now(),
                                  'updated_at' => Carbon::now()
                              ]);
                                  }
          
                                      }
                      }
                  })->everyMinute();

            aeneas Http::pool içerisinde throw, exception vs kullanmayın. Zaten hata vermiyor, çıktı olarak verdikler üzerinde işlem yapın. Ben size daha önce bir örnek vermişim, ondan yola çıkarak yapmaya çalışın. Mantık şu şekilde:

            use Illuminate\Http\Client\Pool;
            use Illuminate\Support\Facades\Http;
            
            $feed = DB::table('feed')
                ->get();
            
            $responses = Http::pool(function(Pool $pool) use ($feed) {
                foreach($feed as $item) {
                    $requests[] = $pool->alias($item->katlink)
                        ->get($item->katlink);
                }   
                
                return $requests;
            });
            
            // Başarısız linkleri tutacak dizi
            $delete = [];
            
            foreach ($responses as $url => $response) {
                // Başarısız linki diziye al ve bir sonraki linke geç
                if($response->failed()) {
                    $deleted[] = $url;
                    continue;
                }
            
               // Buradaki yanıtlar başarılı. Veri tabanı kayıt işlemleri vs yapabilirsiniz.
            }
            
            // Başarılı linkler üzerindeki işlemler bitti. Toplu olarak tek seferde başarısızları sil.
            if(count($delete)) {
                Feed::whereIn('katlink', $delete)
                    ->delete();
            }

            hocam çok teşekkür ederim