Instagram PHP API Kullanımı

Bu yazımda sizlere unofficial yani gayri resmi bir instagram API’si olan mgp25 Instagram API’sinden bahsedeceğim. Sanırım şu an piyasadaki unofficial api’lerin en iyisi diyebiliriz.

Nasıl kullanıyoruz?

Şimdi gelelim nasıl kullanacağımıza. İlk olarak ilgili api’nin github sayfası şudur;
https://github.com/mgp25/Instagram-API

Kurulum yapmak için composer gerekli. Eğer composer nedir, nasıl kullanılır bilmiyorsanız şuradaki dersime gözatın.

Şimdi paketimizi composer yardımı ile indirelim. Şu komut yeterli;

composer require mgp25/instagram-php

Daha sonra sayfamıza dahil edip ayarlarımızı yaparak sınıfımızı başlatalım.

require __DIR__ . '/vendor/autoload.php';

// unofficial bir api olduğu için riskleri kabul ettiğimizi onaylıyoruz
\InstagramAPI\Instagram::$allowDangerousWebUsageAtMyOwnRisk = true;

// instagram kullanıcı adınız
$username = 'xxx';

// instagram şifreniz
$password = 'xxx';

// debug açık ise detayları görürsünüz, tercih size kalmış.
$debug = false;
$truncatedDebug =false;

// kullanacağımız sınıfı başlatıyoruz
$ig = new \InstagramAPI\Instagram($debug, $truncatedDebug);

Evet, şimdi instagram hesabına giriş yapabiliriz.

try {
    $ig->login($username, $password);
} catch (\Exception $e) {
    die('Bir hata oluştu: ' . $e->getMessage());
}

Artık her şey hazır. İstediğimiz şeyleri yapmaya başlayabiliriz.

Hesap (Account) İşlemleri

Mevcut kullanıcı bilgilerini almak

$current = $ig->account->getCurrentUser();
print_r($current->getUser());

Biyografiyi düzenlemek için

echo $ig->account->setBiography('hello world!');

Profil bilgilerini düzenlemek için

echo $ig->account->editProfile(
    'https://erbilen.net', // web
    '+90 530 300 1965', // telefon
    "Erbilen.net", // ad
    'Tayfun Erbilen\'in Kişisel Bloğu', // biyografi
    '[email protected]', // mail
    1, // cinsiyet -1 erkek -2 kadın -3 bilinmeyen
    'erbilennet' // url
);

Profil resmini değiştirmek / kaldırmak

echo $ig->account->changeProfilePicture('resim yolu');
echo $ig->account->removeProfilePicture();

Profili herkese açık ya da gizli olarak ayarlamak

echo $ig->account->setPrivate();
echo $ig->account->setPublic();

Hesap şifresini değiştirmek

echo $ig->account->changePassword('eski şifre', 'yeni şifre');

Akış (Timeline) İşlemleri

Fotoğraf yüklemek için

$photo = __DIR__ . '/instagram.jpg';
$metadata = [
    'caption' => 'Bu fotoğraf API ile ders esnasında yüklendi <3'
];

$photo = new \InstagramAPI\Media\Photo\InstagramPhoto($photo);
echo $ig->timeline->uploadPhoto($photo->getFile(), $metadata);

Video yüklemek için

\InstagramAPI\Media\Video\FFmpeg::$defaultBinary = '/usr/local/bin/ffmpeg';
\InstagramAPI\Utils::$ffprobeBin = '/usr/local/bin/ffprobe';

$video = __DIR__ . '/GOPR1637.MP4';
$metadata = [
    'caption' => 'Bu video API ile ders esnasında yüklendi <3'
];
$video = new \InstagramAPI\Media\Video\InstagramVideo($video);
echo $ig->timeline->uploadVideo($video->getFile(), $metadata);

Albüm yüklemek için

$album = [
    [
        'type' => 'photo',
        'file' => __DIR__ . '/instagram.jpg'
    ],
    [
        'type' => 'video',
        'file' => __DIR__ . '/GOPR1637.MP4'
    ]
];

$metadata = [
    'caption' => 'Bu albüm API ile yüklendi'
];

$mediaOptions = [
    'targetFeed' => \InstagramAPI\Constants::FEED_TIMELINE_ALBUM
];
foreach ($album as &$item) {
    $validMedia = null;
    switch ($item['type']) {
        case 'photo':
            $validMedia = new \InstagramAPI\Media\Photo\InstagramPhoto($item['file'], $mediaOptions);
            break;
        case 'video':
            $validMedia = new \InstagramAPI\Media\Video\InstagramVideo($item['file'], $mediaOptions);
            break;
        default:
            // bilinmeyen türleri görmezden gel.
    }
    if ($validMedia === null) {
        continue;
    }
    try {
        $item['file'] = $validMedia->getFile();
        $item['__media'] = $validMedia;
    } catch (\Exception $e) {
        continue;
    }
    if (!isset($mediaOptions['forceAspectRatio'])) {
        $mediaDetails = $validMedia instanceof \InstagramAPI\Media\Photo\InstagramPhoto
            ? new \InstagramAPI\Media\Photo\PhotoDetails($item['file'])
            : new \InstagramAPI\Media\Video\VideoDetails($item['file']);
        $mediaOptions['forceAspectRatio'] = $mediaDetails->getAspectRatio();
    }
}
unset($item);

echo $ig->timeline->uploadAlbum($album, $metadata);

Bir kullanıcının ya da kendinin paylaştığı içerikleri görmek için

echo $ig->timeline->getUserFeed('user_id');
echo $ig->timeline->getSelfUserFeed();

Zamam çizelgende yani anasayfanda takip ettiğin kullanıcıların paylaşımlarını görmek için

echo $ig->timeline->getTimelineFeed();

Paylaşılan içerikleri arşivlemek ya da arşivden çıkarmak için

echo $ig->timeline->archiveMedia('media_id'); // arşive ekle
echo $ig->timeline->archiveMedia('media_id', 'PHOTO', false); // arşivden çıkar

Arşivlenmiş paylaşımları listelemek için

echo $ig->timeline->getArchivedMediaFeed()

Tüm paylaşımların yedeğini almak için

echo $ig->timeline->backup('yedek klasör yolu');

Medya (Media) İşlemleri

Paylaşılan medyanın detaylarını almak için

echo $ig->media->getInfo('medya_id');

Paylaşılan bir medyayı silmek için

echo $ig->media->delete('medya_id', 'PHOTO|VIDEO|ALBUM');

Paylaşılan bir medyayı düzenlemek için

echo $ig->media->edit('medya_id', 'yeni açıklama');

Paylaşılan bir medyayı beğenmek / beğenmemek için

echo $ig->media->like('medya_id');
echo $ig->media->unlike('medya_id');

Beğenilen medyaların listesini almak için

echo $ig->media->getLikedFeed();

Paylaştığın bir medyayı beğenen kişilerin listesini almak için

echo $ig->media->getLikers('medya_id');

Paylaşılan medya için yorumları aktif etme ya da kapatma

echo $ig->media->enableComments('medya_id');
echo $ig->media->disableComments('medya_id');

Paylaşılan medyaya ait yorumları listelemek için

echo $ig->media->getComments('medya_id');

Paylaşılan medyaya yorum göndermek için

echo $ig->media->comment('medya_id', 'yorum buraya');

Yoruma cevap yazmak için

Bir yoruma cevap yazarken yorumunuzun başında mutlaka @kullaniciadi şeklinde kişiyi belirtmelisiniz.

$ig->media->comment('medya_id', '@username cevabınız', 'yorum_id')

Yoruma yazılan cevapları listelemek için

echo $ig->media->getCommentReplies('medya_id', 'yorum_id')

Yorumları silmek için

echo $ig->media->deleteComment('medya_id', 'yorum_id');

echo $ig->media->deleteComments('medya_id', ['yorum_id1', 'yorum_id2']);

Yorumu beğenmek / beğeniyi kaldırmak için

echo $ig->media->likeComment('yorum_id');
echo $ig->media->unlikeComment('yorum_id');

Yorumu beğenenlerin listesini almak için

echo $ig->media->getCommentLikers('yorum_id');

Paylaşılan bir medyayı kaydetmek ya da kaydedilenden silmek için

echo $ig->media->save('medya_id');
echo $ig->media->unsave('medya_id');

Kayıtlı medyaları listelemek için

echo $ig->media->getSavedFeed();

Medyayı spam olarak bildirmek için

echo $ig->media->report('medya_id');

Yorumu spam olarak bildirmek için

echo $ig->media->reportComment('medya_id', 'yorum_id');

Kullanıcı (People) İşlemleri

Kullanıcı detaylarını bulmak için

echo $ig->people->getInfoById('uye_id');
echo $ig->people->getInfoByName('uye_adi');
echo $ig->people->getSelfInfo();

Son aktivitelerini listelemek için

echo $ig->people->getRecentActivityInbox();

Takip ettiğin kişilerin son aktivitelerini listelemek için

echo $ig->people->getFollowingRecentActivity();

Belli bir algoritmaya göre kullanıcıları listelemek

echo $ig->people->getBootstrapUsers();

Bekleyen arkadaş isteklerini listelemek için

echo $ig->people->getPendingFriendships();

Gelen arkadaşlık isteklerini onaylamak / reddetmek için

echo $ig->people->approveFriendship('user_id');
echo $ig->people->rejectFriendship('user_id');

Seni takip eden birisini silmek için

echo $ig->people->removeFollower('user_id');

Takip ettiklerini listelemek için

echo $ig->people->getFollowing('user_id', \InstagramAPI\Signatures::generateUUID());

echo $ig->people->getSelfFollowing(\InstagramAPI\Signatures::generateUUID());

Takip edenleri listelemek için

echo $ig->people->getFollowers('user_id', \InstagramAPI\Signatures::generateUUID());
echo $ig->people->getSelfFollowers(\InstagramAPI\Signatures::generateUUID());

Kullanıcılarda arama yapmak için

echo $ig->people->search('erbilen');

Facebook algoritmasına göre yeni insanları keşfetmek için

echo $ig->people->discoverPeople();

Bir kullanıcı ile ilişkili önerilen kullanıcıları listelemek için

echo $ig->people->getSuggestedUsers('user_id');

Kullanıcı takip etmek / takipten çıkarmak için

echo $ig->people->follow('user_id');
echo $ig->people->unfollow('user_id');

Kullanıcıyı favorilere eklemek için

Bir kullanıcıyı favorilerinize eklediğinizde kişi bir fotoğraf paylaştığında, telefonunuza bildirim olarak gelir. O kişinin gönderileri öncelikli olarak zaman çizelgenizde görünür, kısaca yakından takip yapacaklarınız için bunu kullanın 😀

echo $ig->people->favorite('user_id');
echo $ig->people->unfavorite('user_id');

Kullanıcı Story attığında bildirim almak için

echo $ig->people->favoriteForStories('user_id');
echo $ig->people->unfavoriteForStories('user_id');

Bir kullanıcıyı spam olarak şikayet etmek için

echo $ig->people->report('user_id');

Bir kullanıcının hesabını bloke etmek / açmak için

echo $ig->people->block('user_id');
echo $ig->people->unblock('user_id');

Bir kullanıcının paylaştığı medya ve storyleri gizlemek ya da göstermek için

echo $ig->people->muteUserMedia('user_id', 'story|post|all');
echo $ig->people->unmuteUserMedia('user_id', 'story|post|all');

Engellediğin kişilerin listesi için

echo $ig->people->getBlockedList()

Paylaştığınız storyleri görmesini istemediğiniz birini engellemek ya da engelini açmak için

echo $ig->people->blockMyStory('user_id');
echo $ig->people->unblockMyStory('user_id');

Storyi görmesi engellenen kullanıcıları listelemek için

echo $ig->people->getBlockedStoryList();

Arkadaşının storylerini gizlemek ya da göstermek için

echo $ig->people->muteFriendStory('user_id');
echo $ig->people->unmuteFriendStory('user_id');

Mesaj (Direct) İşlemleri

Son atılan mesajları listelemek

echo $ig->direct->getInbox();

Mesaj detaylarını almak için

echo $ig->direct->getThread('340282366841710300949128217702782372541');

Mesaj grubu kurmak için

$userIds =['user_id', 'user_id2']; // en az 2 kişi gerekli
$groupTitle = 'Prototürk Yardımlaşma Grubu';
echo $ig->direct->createGroupThread($userIds, $groupTitle);

Gruba yeni kullanıcı eklemek için

echo $ig->direct->addUsersToThread('thread_id', ['user_id']);

Gruba mesaj göndermek için

$thread_id = 'grup idsi';
$msg = 'bu gruba mesajımın içeriğidir!';
$ig->direct->sendText([
    'thread' => $thread_id
], $msg);

Gruba fotoğraf göndermek için

$thread_id = 'grup idsi';
$photo = 'fotoğraf yolu';
$ig->direct->sendPhoto([
    'thread' => $thread_id
], $photo);

Gruba görünüp kaybolan fotoğraf göndermek için

Bazı fotoğraflara baktığınızda birkaç saniye sonra bir daha göremiyorsunuz. Bu mantıkta fotoğraf göndermek için;

$photo = 'fotoğraf yolu';
$thread_id = 'grup id';
$ig->direct->sendDisappearingPhoto([
    'thread' => $thread_id
], $photo);

Grubu sessizi almak ya da çıkartmak için

echo $ig->direct->muteThread('thread_id');
echo $ig->direct->unmuteThread('thread_id');

Gruptan çıkmak için

echo $ig->direct->leaveThread('thread_id');

Bir ve ya birden fazla kullanıcıya mesaj göndermek için

$msg = 'Bu benim test mesajım!';
$ig->direct->sendText([
    'users' => ['user_id']
], $msg);

Fotoğraf göndermek için

$photo ='fotoğraf yolu';
$ig->direct->sendPhoto([
    'users' => ['user_id']
], $photo);

Kaybolan fotoğraf göndermek için

$photo = 'fotoğraf yolu';
$ig->direct->sendDisappearingPhoto([
    'users' => ['user_id']
], $photo);

Hashtag (etiket) göndermek için

echo $ig->direct->sendHashtag(
    ['users' => ['user_id']],
    'eskişehir'
);

Lokasyon göndermek için

echo $ig->direct->sendLocation(
    ['users' => ['user_id']],
    'lokasyon_id'
);

Kullanıcı profili göndermek için

echo $ig->direct->sendProfile(
    ['users' => ['user_id']],
    'user_id' // mesajlaştığın kişiye göndereceğin kullanıcı
);

Yazdığınız bir mesajı silmek için

echo $ig->direct->deleteItem('thread_id', 'mesaj_id');

Hikaye (Story) İşlemleri

Hikayeye fotoğraf eklemek için

Etiket eklerken belirtilen etiket mutlaka caption içerisinde yer almalı. Ve etiket ayarlarını çok ellememek lazım, maksat etikette çıkmaksa ayarları bu şekilde bırakmak kafi.

$photo = __DIR__ . '/instagram.jpg';
$metadata = [
    'caption' => '#eskişehir bu story api ile gönderildi',
    'hashtags' => [
        [
            'tag_name'         => 'eskişehir',
            'x'                => 0.5,
            'y'                => 0.5,
            'width'            => 0.24305555,
            'height'           => 0.07347973,
            'rotation'         => 0.0,
            'is_sticker'       => false,
            'use_custom_title' => false
        ]
    ]
];

$photo = new \InstagramAPI\Media\Photo\InstagramPhoto($photo, ['targetFeed' => \InstagramAPI\Constants::FEED_STORY]);
echo $ig->story->uploadPhoto($photo->getFile(), $metadata);

Hikayeye video eklemek için

\InstagramAPI\Media\Video\FFmpeg::$defaultBinary = '/usr/local/bin/ffmpeg';
\InstagramAPI\Utils::$ffprobeBin = '/usr/local/bin/ffprobe';

$video = __DIR__ . '/cplAZjZmjWRNtYya3pqZAfcnMsZ4P8K.mov';
$metadata = [
    'caption' => '#eskişehir bu story api ile gönderildi',
    'hashtags' => [
        [
            'tag_name'         => 'eskişehir',
            'x'                => 0.5,
            'y'                => 0.5,
            'width'            => 0.24305555,
            'height'           => 0.07347973,
            'rotation'         => 0.0,
            'is_sticker'       => false,
            'use_custom_title' => false
        ]
    ]
];

$video = new \InstagramAPI\Media\Video\InstagramVideo($video, ['targetFeed' => \InstagramAPI\Constants::FEED_STORY]);
echo $ig->story->uploadVideo($video->getFile(), $metadata);

Takip ettiklerinin hikayelerini görmek için

echo $ig->story->getReelsTrayFeed();

Kullanıcının hikayelerini görmek için

echo $ig->story->getUserReelMediaFeed('user_id');

Birde kullanıcının canlı yayınlarınıda dahil eden metodumuz var. Oda;

echo $ig->story->getUserStoryFeed('1957285393');

Birden fazla kullanıcının hikayelerini görmek için

echo $ig->story->getReelsMediaFeed(['user_id', 'user_id2']);

Arşivlenmiş hikayeleri listelemek için

echo $ig->story->getArchivedStoriesFeed();

arşivlenmiş hikayenin detaylarını görmek için

echo $ig->story->getReelsMediaFeed(['archiveDay:XXX']);

Hikayeye bakan kullanıcıları listelemek için

echo $ig->story->getStoryItemViewers('story_id');

Hikaye paylaşım ayarlarını görmek ve değiştirmek

echo $ig->story->getReelSettings();

Burada engellediğiniz kullanıcılarıda göreceksiniz. Zaten kullanıcı işlemlerinde bunu anlattım ama hikayelerinizi birilerinin görmesini engellemek ya da engelini kaldırmak isterseniz;

echo $ig->people->blockMyStory('user_id');
echo $ig->people->unblockMyStory('user_id');

bazı hikaye ayarlarını değiştirebilirsiniz. Fonksiyondaki ilk parametrede hikayenize kimlerin yazacağını belirleyebilirsiniz. Değer olarak anyone yazarsanız sizi takip edenler cevaplayabilir. following yazarsanız sizin takip edip sizi takibe alanlar cevaplayabilir. off yazarsanızda kimse cevaplayamaz.

İkinci parametrede hikayenin yeniden paylaşılmasına izin verebilir ya da izini kapatabilirsiniz. true ya da false yani.

Üçüncü parametrede ise hikayelerin bitmesi ardından arşivlenip arşivlenmeyeceğini belirleyebilirsiniz. Arşivlenmesi için on, arşivlenmemesi için off değerini belirleyebilirsiniz.

echo $ig->story->setReelSettings('anyone', false, 'on');

Keşfet (Discover) İşlemleri

Keşfek akışını listelemek için

echo $ig->discover->getExploreFeed();

Kullanıcılar, etiketler ve lokasyonlarda aramak için

echo $ig->discover->search('eskişehir');

Önerilen kullanıcıları, etiketleri ve lokasyonları bulmak için

echo $ig->discover->getSuggestedSearches('users');
echo $ig->discover->getSuggestedSearches('hashtags');
echo $ig->discover->getSuggestedSearches('places');

Son aramaları listelemek ve arama geçmişini temizlemek için

echo $ig->discover->getRecentSearches();
echo $ig->discover->clearSearchHistory()

Etiket (Hashtag) İşlemleri

Etiket detayına bakmak için

echo $ig->hashtag->getInfo('eskişehir');

Etikete ait hikayelere (story) bakmak için

echo $ig->hashtag->getStory('eskişehir');

Etiketlerde aramak için

echo $ig->hashtag->search('eskişehir');

Etiketi takip etmek / takipten çıkarmak için

echo $ig->hashtag->follow('eskişehir');
echo $ig->hashtag->unfollow('eskişehir');

İlişkili etiketleri bulmak için

echo $ig->hashtag->getRelated('php');

Etikete ait paylaşımları listelemek için

echo $ig->hashtag->getFeed('codeigniter', \InstagramAPI\Signatures::generateUUID());

Kullanıcının takip ettiği etiketleri listelemek için

// mevcut hesap için
echo $ig->hashtag->getSelfFollowing();

// başka kullanıcı için
echo $ig->hashtag->getFollowing('user_id');

Etiket takip önerileri

Sanırım bu öneriler daha önce takip ettiğin etiketlere göre belirleniyor.

echo $ig->hashtag->getFollowSuggestions();

Canlı Yayın (Live) İşlemleri

Önerilen canlı yayınları listelemek için

echo $ig->live->getSuggestedBroadcasts();

Canlı yayın detaylarına bakmak için

echo $ig->live->getInfo('yayin_id');

Canlı yayının izleyenlerini listelemek içini

Bu işlem sadece kendi yayınlarınız için geçerlidir.

echo $ig->live->getViewerList('yayin_id');

// bittikten sonraki tüm izleyici listesi için
echo $ig->live->getFinalViewerList('yayin_id');

// canlı yayın bittikten sonra kayıt olan videoyu izleyenlerin listesi
echo $ig->live->getPostLiveViewerList('yayin_id');

Canlı yayın kalp atışları ve izleyici sayısı için

echo $ig->live->getHeartbeatAndViewerCount('yayin_id');

Canlı yayına yorum göndermek için

echo $ig->live->comment('yayin_id', 'merhaba dünya!');

Canlı yayın yorumlarını almak için

echo $ig->live->getComments('yayin_id');

Canlı yayın yorumu açmak / kapatmak

İstediğiniz gibi izleyicilerin yazmalarını engelleyip ya da yazmalarını açabilirsiniz.

echo $ig->live->enableComments('yayin_id');
echo $ig->live->disableComments('yayin_id');

Canlı yayına beğeni göndermek için

$likeCount = 5; // 1 ile 6 arasında olmalı
echo $ig->live->like('yayin_id', $likeCount);

Canlı yayın beğeni sayısını almak için

echo $ig->live->getLikeCount('yayin_id');

Canlı yayın başlatmak için

// yayında oynatılacak video
$videoFilename = __DIR__ . '/a.mov';

// ffmpeg yolu
$ffmpegPath = '/usr/local/bin/ffmpeg';
$ffmpeg = \InstagramAPI\Media\Video\FFmpeg::factory($ffmpegPath);

// canlı yayını oluştur
$stream = $ig->live->create();
$broadcastId = $stream->getBroadcastId();

// canlı yayını başlat
$ig->live->start($broadcastId);

$streamUploadUrl = preg_replace(
    '#^rtmps://([^/]+?):443/#ui',
    'rtmp://\1:80/',
    $stream->getUploadUrl()
);

$broadcastProcess = $ffmpeg->runAsync(sprintf(
    '-rtbufsize 256M -re -i %s -acodec libmp3lame -ar 44100 -b:a 128k -pix_fmt yuv420p -profile:v baseline -s 720x1280 -bufsize 6000k -vb 400k -maxrate 1500k -deinterlace -vcodec libx264 -preset veryfast -g 30 -r 30 -f flv %s',
    \Winbox\Args::escape($videoFilename),
    \Winbox\Args::escape($streamUploadUrl)
));

do {
    sleep(1);
} while ($broadcastProcess->isRunning());

// yayından sonraki izleyici detaylarını al
echo $ig->live->getFinalViewerList($broadcastId);

// canlı yayını sonlandır
$ig->live->end($broadcastId);

// canlı yayın bittikten sonra kaydet
$ig->live->addToPostLive($broadcastId);

Lokasyon (Location) İşlemleri

Koordinata göre lokasyon arama için

echo $ig->location->search('latitude', 'longitude');

Koordinatın yakınlarındaki lokasyonları bulmak için

echo $ig->location->findPlacesNearby('latitude', 'longitude');

Aranan kelimeye göre lokasyon bulmak için

echo $ig->location->findPlaces('eskişehir');

Lokasyona göre paylaşımları listelemek için

echo $ig->location->getFeed('lokasyon_id', \InstagramAPI\Signatures::generateUUID());

 

Yazar: Tayfun Erbilen

2009'dan beri web işleriyle uğraşan, aynı zamanda amatör müziklede ilgilenen sıradan birisi..

“Instagram PHP API Kullanımı” için 12 yorum

  1. Abi her şey çok güzel teşekkürler. Bir tek sayfalama mantığını yapamadım. takipçileri çekerken hepsini çekmiyor next_max_id veriyor onu set ediyor yine olmuyor. github örnekteki gibi döngüye sokuyorum tekrar tekrar yazdırıyor. Bu kısmıda açıklarsan çok sevinirim.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

This site uses Akismet to reduce spam. Learn how your comment data is processed.