PHP Mantığı Sorusu

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    turkz
    turkz's avatar
    Kayıt Tarihi: 13/Aralık/2009
    Erkek

    Eğitimini almadan hobi olarak uğraştığım için tam mantığını anlayamıyorum. İnternette baktıklarımdan da anlamadım. O yüzden yardıma ihtiyacım var. Aşağıdaki kod youtubedan videoları çekiyor. Her video çekişinde veritabanını boşaltıp tekrar kaydediyor. Benim isteğim: boşaltmasın, video_id'e baksın eğer veritabanında yoksa veritabanına o bilgileri eklesin istiyorum. Github sayfası: https://github.com/kapil-devplr/trending_youtube   Anlattığım kod parçası:

    <?
    include('db_connection.php');
    $API_key  = 'AIzaSyBlPryS3cIa-ugABVZ361FjqKXXrI7jQN0';
    $videoList = json_decode(file_get_contents('https://www.googleapis.com/youtube/v3/videos?part=snippet,statistics&chart=mostPopular®ionCode=TR&maxResults=10&key='.$API_key.''));
    //echo '<pre>'; print_r($videoList->items);
    $sql = "truncate table youtube_tranding_list";
    $conn->query($sql);
    
    foreach($videoList->items as $item){
    	$channel = json_decode(file_get_contents('https://www.googleapis.com/youtube/v3/channels?id='. $item->snippet->channelId .'&key='.$API_key.'&part=snippet'));
    	$video_id=mysqli_real_escape_string($conn,$item->id);
    	$video_etag=mysqli_real_escape_string($conn,$item->etag);
    	$video_date=date('Y-m-d h:i:s', strtotime($item->snippet->publishedAt));
    	$video_title=mysqli_real_escape_string($conn,$item->snippet->title);
    	$video_description=mysqli_real_escape_string($conn,$item->snippet->description);
    	$video_url='https://www.youtube.com/watch?v='.$item->id;
    	$video_thumbnails_default=mysqli_real_escape_string($conn,$item->snippet->thumbnails->default->url);
    	$video_thumbnails_medium=mysqli_real_escape_string($conn,$item->snippet->thumbnails->medium->url);
    	$video_thumbnails_high=mysqli_real_escape_string($conn,$item->snippet->thumbnails->medium->url);
    	$video_viewCount=$item->statistics->viewCount;
    	$video_likeCount=$item->statistics->likeCount;
    	$video_dislikeCount=$item->statistics->dislikeCount;
    	$video_commentCount=$item->statistics->commentCount;
    	foreach($channel->items as $channels){
    	$channels_title=mysqli_real_escape_string($conn,$channels->snippet->title);
    	$channels_description=mysqli_real_escape_string($conn,$channels->snippet->description);
    	$channels_thumbnail_default=mysqli_real_escape_string($conn,$channels->snippet->thumbnails->default->url);
    	$channels_thumbnail_medium=mysqli_real_escape_string($conn,$channels->snippet->thumbnails->medium->url);
    	$channels_thumbnail_high=mysqli_real_escape_string($conn,$channels->snippet->thumbnails->high->url);
    	}
    	$sql = "INSERT INTO youtube_tranding_list (video_id, video_etag, video_date,video_title,video_description,video_url,video_thumbnails_default,video_thumbnails_medium,video_thumbnails_high,video_viewCount,video_likeCount,video_dislikeCount,video_commentCount,channels_title,channels_description,channels_thumbnail_default,channels_thumbnail_medium,channels_thumbnail_high)VALUES ('$video_id', '$video_etag', '$video_date','$video_title','$video_description','$video_url','$video_thumbnails_default','$video_thumbnails_medium','$video_thumbnails_high','$video_viewCount','$video_likeCount','$video_dislikeCount','$video_commentCount','$channels_title','$channels_description','$channels_thumbnail_default','$channels_thumbnail_medium','$channels_thumbnail_high')";
    	$conn->query($sql);
    }
    
    $sql = "SELECT video_id, DATE_FORMAT(video_date, '%d/%m/%Y %H:%i:%s') as video_date,video_title,video_url,video_thumbnails_default,video_viewCount,video_likeCount,video_dislikeCount,video_commentCount,channels_title FROM youtube_tranding_list";
    	if ($result = $conn -> query($sql)) { $srno=1;
    	echo '<table class="table table-hover">
    			<thead>
    			<tr>
    			<th scope="col">Sr.</th>
    			<th scope="col">Video date</th>
    			<th scope="col">Video title</th>
    			<th scope="col">Video url</th>
    			<th scope="col">Video thumbnails</th>
    			<th scope="col">Statistics</th>
    			<th scope="col">Channel</th>
    			<th scope="col">Details</th>
    			</tr>
    			</thead>
    			<tbody>';
    	while ($row = $result -> fetch_assoc()) {
    		echo'<tr class="table-success">
    			<td>'.$srno++.'</td>
    			<td>'.$row['video_date'].'</td>
    			<td>'.$row['video_title'].'</td>
    			<td> <a href="'.$row['video_url'].'" target="_blank">'.$row['video_url'].'</a></td>
    			<td> <img src="'.$row['video_thumbnails_default'].'"> </td>
    			<td width="20%">Video View Count: '.$row['video_viewCount'].'<br>
    			Video like Count: '.$row['video_likeCount'].'<br>
    			Video Dislike Count: '.$row['video_dislikeCount'].'<br>
    			Video Comment Count:'.$row['video_commentCount'].'</td>
    			<td>'.$row['channels_title'].'</td>
    			<th scope="col"><a href="/video_details.php?video_id='.$row['video_id'].'" target="_blank">Details</a></button></th>
    			</tr>';	
    		}
    		echo '</tbody></table>';
    	}
    $conn->close();
    ?>

     

    turkz tarafından 18/Mar/21 00:18 tarihinde düzenlenmiştir

    Dünyayı iyiler kurtaracak.
  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    LevhiMahfuz
    LevhiMahfuz's avatar
    Kayıt Tarihi: 15/Temmuz/2015
    Erkek

    Selamlar,

    Hobi olarak uğraştığınız için tam kod değil ama bilgi paylaşmaya çalışacağım. 

    6. satırda "truncate table youtube_tranding_list" verileri aldığınız tablonuzu her requestte siliyor. Bu satırı,

    $sql= ""; 

    Olarak güncellerseniz hem değişken tanımlanmış olur, hem de eski veriler silinmez. (edit her requestte duplicate verileri de alır veritabanı şişer sadece bilgi olması için paylaştım)

    Eğer veritabanında varsa bölümünde ki kontrolü, 9. satırda başlayan foreach içerisinde 35. satırdan önce mümkünse 10. satırda yapmanız gerekiyor.  

     

    LevhiMahfuz tarafından 18/Mar/21 00:32 tarihinde düzenlenmiştir

    Uçamıyorsan, koş. Koşamıyorsan, yürü. Yürüyemiyorsan, sürün. Ama yerinde durma!
  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    turkz
    turkz's avatar
    Kayıt Tarihi: 13/Aralık/2009
    Erkek

    truncate silme tamam da veri varmı bak yoksa kaydet olayını hiç anlamadım


    Dünyayı iyiler kurtaracak.
  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    NoktaliVirgul
    NoktaliVirgul's avatar
    Kayıt Tarihi: 02/Temmuz/2007
    Erkek
    turkz bunu yazdı

    truncate silme tamam da veri varmı bak yoksa kaydet olayını hiç anlamadım

    Şöyle yapabilirsin;

    @LevhiMahfuz'un söylediği foreach döngüsü içinde video_id'yi değişkene atadıktan sonra (13. satırdan sonra) araya ufak bir sql sorgusu yaz. Veritabanından o video_id'yi çekmeye çalışsın.

    Eğer sonuç dönerse; demekki bu video_id var demektir. Bu durumda foreach'in devam etmesine gerek yok. Geri kalan kısımları atlayıp foreach'in başına dönebilir. (Google -> php continue)

    Eğer sonuç dönmezse; demekki bu video_id veritabanında yokmuş. Foreach kendi işini yapmaya devam etsin.


    If my calculations are correct, when this baby hits eighty-eight miles per hour... you"re gonna see some serious shit.
  5. KısayolKısayol reportŞikayet pmÖzel Mesaj
    yolbulucu
    yolbulucu's avatar
    Kayıt Tarihi: 06/Nisan/2007
    Homo

    bunu tamamen sql de çözebilirsin : 

    - truncate satırını sil

    - tabloda video id sütununu primary key yap

    - "insert into" yu "replace into" ile değiştir


    29.99cm, titanyum kaplamalı, çift damarlı, su ve yağ soğutmalı.
  6. KısayolKısayol reportŞikayet pmÖzel Mesaj
    end
    end's avatar
    Kayıt Tarihi: 16/Ekim/2016
    Erkek
    yolbulucu bunu yazdı

    bunu tamamen sql de çözebilirsin : 

    - truncate satırını sil

    - tabloda video id sütununu primary key yap

    - "insert into" yu "replace into" ile değiştir

    "just overwrites records that have the same PRIMARY KEY or UNIQUE index, however, beware."

    Ya primary key'i video idleri değilse?


    0x0480 takilin madem ﷽﷽﷽
  7. KısayolKısayol reportŞikayet pmÖzel Mesaj
    yolbulucu
    yolbulucu's avatar
    Kayıt Tarihi: 06/Nisan/2007
    Homo
    end bunu yazdı
    yolbulucu bunu yazdı

    bunu tamamen sql de çözebilirsin : 

    - truncate satırını sil

    - tabloda video id sütununu primary key yap

    - "insert into" yu "replace into" ile değiştir

    "just overwrites records that have the same PRIMARY KEY or UNIQUE index, however, beware."

    Ya primary key'i video idleri değilse?

     


    29.99cm, titanyum kaplamalı, çift damarlı, su ve yağ soğutmalı.
  8. KısayolKısayol reportŞikayet pmÖzel Mesaj
    end
    end's avatar
    Kayıt Tarihi: 16/Ekim/2016
    Erkek
    yolbulucu bunu yazdı
    end bunu yazdı
    yolbulucu bunu yazdı

    bunu tamamen sql de çözebilirsin : 

    - truncate satırını sil

    - tabloda video id sütununu primary key yap :)

    - "insert into" yu "replace into" ile değiştir

    "just overwrites records that have the same PRIMARY KEY or UNIQUE index, however, beware."

    Ya primary key'i video idleri değilse?

     

    Gözümden kaçmış pardon.

    Bu yollardan birisi, fakat eğer primary keyleri ille de nümerik olsun istiyorsa 

    Update + where kullanabilir bunun yerine.

    Row count yapıp if içine alması kafi olacaktır.


    0x0480 takilin madem ﷽﷽﷽
  9. KısayolKısayol reportŞikayet pmÖzel Mesaj
    turkz
    turkz's avatar
    Kayıt Tarihi: 13/Aralık/2009
    Erkek

    Cevaplar için teşekkürler. replace into üzerinden şu sayfayı buldum https://stackoverflow.com/questions/1361340/how-to-insert-if-not-exists-in-mysql INSERT IGNORE INTO ile yapmak istediğim şeyi yapabildim.


    Dünyayı iyiler kurtaracak.
  10. KısayolKısayol reportŞikayet pmÖzel Mesaj
    wert
    wert's avatar
    Kayıt Tarihi: 19/Eylül/2005
    Erkek

    6-7 satırları silip 

    veri tabanında video_id yi unique yapabilirsin

    35 satır hata verirse try arasına alsan olmazmı


    |sadece aptalların başarısı ders notu ile ölçülür|
  11. KısayolKısayol reportŞikayet pmÖzel Mesaj
    turkz
    turkz's avatar
    Kayıt Tarihi: 13/Aralık/2009
    Erkek
    wert bunu yazdı

    6-7 satırları silip 

    veri tabanında video_id yi unique yapabilirsin

    35 satır hata verirse try arasına alsan olmazmı

    Teşekkürler hocam üstte arkadaşların dediği gibi video idyi pk yaptım insert ignore into ile farklı olanı ekliyorum tam istediğim şey buydu.


    Dünyayı iyiler kurtaracak.
Toplam Hit: 1513 Toplam Mesaj: 11