cURL ile Instagram Fotoğraflarını İndirme

Instagramda yer alan bazı fotoğrafları indirme gereği duyduğumda, birkaç php kod parçası yazarak bu işlemi gerçekleştirdim. Bu işimi gördükten sonra, ya başkaları da bu kodlamayı yapmak isteyip yapamıyorsa? Sorusu aklıma takıldı ve bu işlemi ders olarak anlatmak istedim.

Instagram api 'sini kullanmadan fotoğraf indirme işleminin nasıl yapıldığını göreceğiz. Bu tarz verileri indirme ve veriye bağlanma işlemini gerçekleştirmek için cURL kullanıyoruz. cURL sayesinde, istediğimiz sayfaya erişim sağlayıp, seçmiş olduğumuz verileri indirebiliyoruz. cURL yapısı, organik ziyaretçi olarak tanındığından, herhangi bir sorun çıkmaksızın işlemlerimizi gerçekleştiriyoruz.

İndirme işlemini, fotoğrafın bulunduğu adrese erişim sağlandığında gerçekleştireceğiz. Bu kodlama işlemini bir plan üzerinden gidecek olursak aşağıdaki gibi listelenecektir.

1 - Fotoğrafın Adres Bilgisini Al (Örn: https://instagram.com/p/prwER8Bv1d)
2 - Fotoğraf Adresine cURL Yapısı İle Bağlan.
3 - Fotoğrafın Bulunduğu Adrese preg_match İle Ulaş.
4 - Preg_match İle Gelen Resim Adresini cURL İle İndir.

Şimdi yukarıda sıralamış olduğumuz adımları, işlemlere dökerek ilerleyelim.

1 - Fotoğrafın Adres Bilgisini Al

Bu bilgi kullanıcı tarafından geleceğinden dolayı, herhangi bir işlem yapmaya gerek yoktur. Fakat kullanıcıdan gelecek olan değerin bir Form üzerinden geleceğini düşünürsek, o zaman bu bölümde bir form yapısı oluşturalım.

<form action="" method="post">
<input type="text" name="indir" placeholder="İnstagram Adresini Yazınız." style="padding:10px;border:1px solid #ddd;width:500px"/>
<button style="padding:10px;border:1px solid #ddd;background:#fefefe;cursor:pointer">İndir</button>
</form>

Form yapısını oluşturduğumuza göre, 2. Adıma geçebiliriz.

2 - Fotoğraf Adresine cURL Yapısı İle Bağlan

Bu dersten önce takip edenlerin alışık olduğu, klasik haline gelen Baglan fonksiyonumuzu oluşturuyoruz. Bu fonksiyonda cURL yapısını kullanarak Adres bilgisine ulaşıyoruz.

<?php
Function Baglan($a){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $a);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); // https adresinin düzenlenmesi
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // https adresinin düzenlenmesi
$isle = curl_exec($ch);
curl_close($ch);
return $isle;
}
$Link = Baglan($_POST["indir"]); // Formdan gelen Instagram Linkini Alıp, Fonksiyon ile bağlanıyoruz.
?>

Oluşturmuş olduğumuz bu fonksiyonda, https adresinden bilgi alışverişi yapacağımızdan dolayı CURLOPT_SSL tanımlaması yapıyoruz. Ayrıca indirme işlemi içinde, bu fonksiyona bazı eklemeler yapacağız bunun için 4. Adımdaki düzenlemelere de dikkat edin.

3 - Fotoğrafın Bulunduğu Adrese Preg_Match İle Ulaş

cURL yapısını oluşturduktan sonra, gelen Instagram değerini fonksiyona yazıyoruz. Bu işlem, Instagram da yer alan fotoğrafın sayfasına ulaşmamızı sağlıyor. Şimdiyse preg_match kullanarak, sayfada yer alan resim dosyasının adresini alacağız.

Instagram linkine tarayıcıda bağlandığımızda Sayfa Kaynağını Göster diyoruz. Burada og:image aramasını gerçekleştirerek, resim adresinin bulunduğu HTML tagına ulaşıyoruz. Bulduğumuz meta etiketini kopyalayarak preg_match 'ta düzenlemeler yapıyoruz.

<?php preg_match('@<meta property="og:image" content="(.*?)" />@si', $Link, $ResimYolu); ?>

Yukarıdaki kodları yazdığımızda $ResimYolu değişkeniyle fotoğrafın adresine ulaşmış oluyoruz. Kullanım için, $ResimYolu["1"] yazmamız yeterli olacaktır. İndirmek istediğimiz fotoğrafın adresine ulaştığımıza göre, diğer adıma geçebiliriz. Diğer adımda indirme işlemini gerçekleştireceğiz.

4 - Preg_match İle Gelen Resim Adresini cURL İle İndir

cURL ile indirme işlemi yapabilmek için, CURLOPT_FILE tanımlamasını yapmalıyız. Bu tanımlamayı dilerseniz farklı bir fonksiyonda yapabilirsiniz. Ya da 2. Adımda oluşturduğumuz fonksiyona ekleyerek kod tasarrufu sağlayabilirsiniz. Bu derste, 2. Adımdaki fonksiyona dâhil edeceğiz.

2. adımdaki fonksiyonda bir sorun yaratmadan çalışmasını sağlamak için, 2. Argüman belirlemesi yapıyoruz. İlk olarak Baglan fonksiyonuna bu tanımlamayı yapalım.

DÜZENLEME

Function Baglan($a, $b = ""){

2. parametreyi ekledikten sonra, curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); kodunun hemen altına bir koşul ifadesi içinde, CURLOPT_FILE tanımlamasını yapıyoruz.

EKLEME

if($b == "indir"){
// Resimlerin indirileceği klasörü ve resim dosyasını adını oluşturuyoruz.
$Dosya = fopen("resimler/".date("dmyhis")."-".rand().".jpg","w");
curl_setopt($ch, CURLOPT_FILE, $Dosya); // İndirme işleminin tanımlanması
}

Böylelikle 2. Adımda oluşturduğumuz fonksiyonu düzenlemiş olduk. Bu fonksiyon ile hem bağlanma, hem de indirme işlemini gerçekleştirmiş olacağız.

Oluşturduğumuz Kodların Kullanımı

Bu bölüme kadar olan kodlamaları ve düzenlemeleri yaptıktan sonra sıra, kodların nasıl çalıştığına geliyor. Oluşturmuş olduğumuz kodların en altında önce gelen veriyi kontrol edeceğiz. Daha sonra da 1, 2, 3 ve 4. Adımda ki kodların çalışmasını sağlayarak, fotoğrafı indireceğiz.

<?php
if(@$_POST["indir"] != ""){
$Link = Baglan($_POST["indir"]);
preg_match('@<meta property="og:image" content="(.*?)" />@si', $Link, $ResimYolu);
$Tamamla = Baglan($ResimYolu["1"],"indir");
echo $Tamamla ? 'Fotoğraf İndirildi :)' : 'Fotoğraf İndirilemedi :/ ';
}
?>

Böylelikle, Instagramda yer alan fotoğrafları indirmiş oluyoruz. Burada yer alan kodlar üzerinde biraz düzenlemeler yaparak daha işlevsel bir şekilde çalışmasını sağlayabiliriz.
- 20.03.2015 / 12:15:26 11

Sosyal Medya Paylaşım Alanı

Kaynak(lar)

Bunlarda İlginizi Çekebilir

Genel Makaleler

Google Aramalarında Yazar Resmi Çıkarma

Kategori: Genel Makaleler | 02.10.2013
8:13 Javascript

Javascript'te Fonksiyon Yapısı ve Kullanımı

Kategori: Javascript | 13.03.2014
Seo(.htaccess)

Google Optimizasyonu - 3 | Görsel İçerik Kullanımı

Kategori: Seo(.htaccess) | 13.08.2014
7:32 jQuery Dersleri

jQuery Error ile Hataları Bulmak ve Müdahale Etmek

Kategori: jQuery Dersleri | 03.05.2013
10:48 Php Dersleri

Php ile Dosya Oluşturma | Touch Functionunu Kullanarak

Kategori: Php Dersleri | 03.05.2013

Yorum Listesi (6) # YorumYap

  • Abdulkadir Avan (20.03.2015 - 13:02:39)
    Güzel bilgiler teşekkürler :)
  • Ahmet Yerli (20.03.2015 - 17:56:59)
    Bunu nasıl scripte çevirebiliriz ?
  • Cibril (30.05.2015 - 12:10:27)
    echo $tamamla ? 'Fotoğraf İndirildi' : 'Fotoğraf İndirilemedi';

    kısımında fotoğraf indirildi yazısının yanında fotoğrafıda göstermek istiyorum.

    echo $tamamla ? 'Fotoğraf İndirildi <?php echo $ResimYolu[1];>' : 'Fotoğraf İndirilemedi';

    yaptım ama olmadı.
  • murat (25.08.2015 - 00:20:20)
    Merhaba;
    Bilgisayara bu şekilde indiriliyor oky, ama bunu telefonlarda nasıl kullanabiliriz ? Yani dosyayı direk telefona indirme işlemini nasıl yapabiliriz ;?
  • burak (25.01.2017 - 18:30:23)
    çok güzel bi anlatım teşekkürler
  • Ben robot değilim (16.07.2017 - 01:01:23)
    Ben robot değilim

Hadi Sende Yorum Yap!

Yorum Gönderilmiştir. Onaylandıktan Sonra Mesajınız Yayınlanacaktır.