RSS’ten Instagram’a PHP Botu

Rss to Instagram

RSS akışınızı 1080×1080 başlık kartlarına çevirip Instagram Profesyonel hesabınıza otomatik paylaşan küçük bir PHP botu.

Birçok sitede RSS var ama Instagram’a paylaşım hâlâ elle. Bu yazıda, RSS öğelerini okuyup 1080×1080 başlık kartı görsellerine çeviren ve Instagram Graph API üzerinden otomatik yayımlayan, tamamen kendinize ait küçük bir PHP botu kuruyoruz. Eklenti yok, abonelik yok—sadece PHP (cURL + GD + FreeType) ve bir cron işi.

Bölüm yapısı

  1. Gereksinimler (IG Profesyonel + Sayfa, Facebook App, Page Access Token, izinler)

  2. Dosya ağacı ve .env mantığı

  3. iggen.php ile 1080×1080 başlık kartı (font/padding/renk parametreleri)

  4. rss_to_instagram.php ile /media/media_publish akışı

  5. Cron, limit ve deduplikasyon

  6. SSS / Hata giderme

  7. Github

Kod (anahtarsız, paylaşılabilir)

<?php
// rss_to_instagram.php (TR anlatım, key-free)
const IG_USER_ID = 'YOUR_IG_USER_ID';
const PAGE_TOKEN = 'YOUR_PAGE_ACCESS_TOKEN';
const RSS_URL = 'https://example.com/feed';
const CAPTION_TPL = "{title}\n\nDaha fazlası: {link}\n\n#otomasyon";
const MAX_ITEMS = 3;

function http_get($u){ $ch=curl_init($u); curl_setopt_array($ch,[CURLOPT_RETURNTRANSFER=>1, CURLOPT_FOLLOWLOCATION=>1, CURLOPT_TIMEOUT=>20]); $r=curl_exec($ch); curl_close($ch); return $r; }
function http_post($u,$f){ $ch=curl_init($u); curl_setopt_array($ch,[CURLOPT_POST=>1, CURLOPT_RETURNTRANSFER=>1, CURLOPT_POSTFIELDS=>$f, CURLOPT_TIMEOUT=>30]); $r=curl_exec($ch); curl_close($ch); return $r; }

function caption($title,$link){
$c = str_replace(['{title}','{link}'], [$title,$link], CAPTION_TPL);
return mb_strlen($c)>2200 ? mb_substr($c,0,2190).'…' : $c;
}

$rss = @simplexml_load_string(http_get(RSS_URL)); if(!$rss){ exit("RSS hatası\n"); }
$posted=0;

foreach ($rss->channel->item as $it) {
if ($posted>=MAX_ITEMS) break;
$title=(string)$it->title; $link=(string)($it->link ?: $it->guid);

// 1080×1080 başlık kartı (JPEG) — kendi endpoint’ine göre güncelle
$image_url = 'https://yourdomain.com/rss2ig/iggen.php?mode=title'
. '&title='.urlencode($title)
. '&brand='.urlencode('#0f172a')
. '&fg=' .urlencode('#ffffff')
. '&padx=160&pady=140&maxfs=84&minfs=40'
. '&label='.urlencode('ozanyildirim.com').'&labelfs=28';

// 1) container
$c = http_post("https://graph.facebook.com/v20.0/".IG_USER_ID."/media", [
'image_url'=>$image_url, 'caption'=>caption($title,$link), 'access_token'=>PAGE_TOKEN
]);
$cj=json_decode($c,true); if(empty($cj['id'])){ error_log("container: $c"); continue; }

// 2) publish
$p = http_post("https://graph.facebook.com/v20.0/".IG_USER_ID."/media_publish", [
'creation_id'=>$cj['id'], 'access_token'=>PAGE_TOKEN
]);
$pj=json_decode($p,true);
if(!empty($pj['id'])){ echo "OK: $title\n"; $posted++; } else { error_log("publish: $p"); }
}
echo "Bitti: $posted\n";

Tags

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir