Скрипт добавляет запись в БД дважды

351
28 мая 2017, 22:54
include 'simple_html_dom.php';
$servername = ":)";
$username = ":)";
$password = ":)";
$conn = new mysqli($servername, $username, $password);
$conn -> query("USE admin_eda");
$conn->set_charset("utf8");
if ($conn->connect_error){ 
  die("Connection failed: " . $conn->connect_error);
}
$html = new simple_html_dom();
$start = (int)file_get_contents("last.txt");
$er = 0;
$bdc = (int)file_get_contents("last.txt");
while($er <= 50){
  $start++;
  $url = "https://eda.ru/recepty/vypechka-deserty/brauni-brownie-".$start;
  $ch = curl_init();
  curl_setopt($ch,CURLOPT_USERAGENT, 'Mozilla/5.0 (Linux; Android 6.0.1; Q415 Build/MOB31K; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/51.0.2704.106 Mobile Safari/537.36');
  curl_setopt ($ch, CURLOPT_URL, $url);
  curl_setopt ($ch, CURLOPT_TIMEOUT, 60); 
  curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, true);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  $result = curl_exec($ch);
  $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
  curl_close($ch);
  if($httpCode == 404) {
    $er++;
  }
  else{
    $html = str_get_html($result);
    $link = $html -> find("link", 0);
    $exploded = explode("/", $link->href);
    $category = $exploded[4];
    $headers = "";
    $h_pre_divs = $html -> find(".g-first-page-block", 0);
    $chd = $h_pre_divs -> find("p",0);
    if(!is_object($chd)){
      $g = $h_pre_divs -> children(0) -> children(0) -> attr;
      $subg = substr($g['data-gall-photos-urls'], 7, -2);
      $hurls = explode("jpg", "','//////////".$subg);
      $numItems = count($hurls);
      $i = 0;
      foreach($hurls as $f){
        if(strlen($f) > 3){
          $s = substr($f, 13);
          $headers .= $s."jpg";
          $headers .= "##INS2##";
          $headers .= "http://musicourlife.ru/eda/images/header-".$i."-".$start.".jpg";
          if($i+1 != $numItems -1) {
            $headers .= "##INS##";
          }
          $i++;
        }
      }
    }
    $name = $html -> find("meta[property=og:title]", 0) -> content;
    $breadcrumbs = "";
    $breadcrumbs_ao = $html -> find(".b-breadcrumbs", 0);
    $breadcrumbs_as = $breadcrumbs_ao -> find("a");
    foreach($breadcrumbs_as as $breadcrumb_a){
      $breadcrumbs .= "##INS##";
      $breadcrumbs .= $breadcrumb_a -> innertext;
    }
    if(strlen($breadcrumbs) > 0){
      $breadcrumbs = substr($breadcrumbs, 7);
    }
    $energy = "";
    $value_items = $html -> find(".value-item");
    foreach($value_items as $value_item){
      $energy .= "##INS##";
      $value_spans = $value_item -> find("span");
      $energy .= $value_spans[0]."##INS2##".$value_spans[(count($value_spans)-1)];
    }
    if(strlen($energy) > 0){
      $energy = substr($energy, 7);
    }
    $servings = explode(" ", $html -> find(".b-recipe-page__ingredients", 0) -> children(0) -> children(0) -> innertext)[0];
    if(strlen($servings) > 0){
      $servings = substr($servings, 7);
    }
    $ingridients = "";
    foreach($html -> find(".ingredients-list", 0) -> find("li") as $ingridient){
      $ingridients .= "##INS##";
      $ingri_spans = $ingridient -> find("span");
      $ingridients .= $ingri_spans[0]."##INS2##".$ingri_spans[(count($ingri_spans)-1)];
    }
    if(strlen($ingridients) > 0){
      $ingridients = substr($ingridients, 7);
    }
    $cooking_time = "";
    $cook = $html -> find(".cooking-time", 0);
    if(is_object($cook)){
      $cooking_time = $cook -> innertext;
    }
    $instr = "";
    $imgc = 0;
    foreach($html -> find(".b-recipe-page__instruction", 0) -> children(2) -> find("li") as $instr_item){
      $instr_item = $instr_item -> children(0) -> children(0);
      if($instr_item->class == "s-inner-content"){
        $instr .= "##INS##";
        $instr .= "txt".$instr_item->innertext;
      }
      else if($instr_item->class == "b-photo-gall__img"){
        $instr .= "##INS##";
        $instr .= "img".$instr_item->attr['src'];
        $instr .= "##INS2##";
        $instr .= "http://musicourlife.ru/eda/images/recype-".$imgc."-".$start.".jpg";
        $imgc++;
      }
    }
    if(strlen($instr) > 0){
      $instr = substr($instr, 7);
    }
    $bdc = $start;
    $insert = "INSERT INTO `admin_eda`.`eda` (`name`,`category`,`headers`,`breadcrumbs`,`energy`,`servings`,`ingridients`,`time`,`instruction`) VALUES ('$name', '$category', '$headers', '$breadcrumbs', '$energy', '$servings', '$ingridients', '$cooking_time', '$instr');";     
    if(mysqli_query($conn, $insert)){ 
      echo 'success'; 
    }
    else {
      if ($conn->connect_error){  
        die("Connection failed: " . $conn->connect_error);
      } 
    }
  }
}
file_put_contents('last.txt', $bdc);

Суть: храню номер последнего рецепта в файле last.txt, в скрипте его получаю и пока не пойдут 404 ошибки (50 штук) парсить каждый рецепт и добавлять в бд. Вот сейчас запустил, по сути 2 рецепта было спарсено, было выведено два success но в бд записей почему-то 4, эти 2 и еще раз они же, тоесть не 1,1,2,2, а 1,2,1,2. В чем проблема?

Answer 1

Оставил костыль с проверкой по имени, знаю что плохо но работа стоит

READ ALSO
Вызов С++ функции из ассемблера

Вызов С++ функции из ассемблера

Здравствуйте, есть массив в ASM(уже инициализированный), вызывается функция С++ которая сортирует и возвращает уже отсортированный массивНаписал...

473
Алгоритм простого числа

Алгоритм простого числа

Может кто нибудь подсказать, что не так с этим алгоритмом? Проблема в том, что при запуске некоторые числа отображаются в командной строке...

204
Двухмерный массив как параметр функции c++

Двухмерный массив как параметр функции c++

Как передать двухмерный массив в функцию как параметр? пытался сделать ссылку, но выдает ошибкуКод программы ниже

369
Что такое мультисписок?

Что такое мультисписок?

Я долго всматривался в эту картинку и пытался понять, что же такое мультисписок, но до сих пор не понимаю, как это реализовать

388