Instagram-Feed mit RSS.app einbinden
Quell-ID: GitHub Discussion #35
Use Case
Instagram-Posts sollen auf der REDAXO-Website angezeigt werden.
Verwendete AddOns
- Feeds
Problemstellung
Die direkte Instagram-Implementierung im Feeds-AddOn funktioniert nicht mehr aufgrund von API-Änderungen seitens Instagram/Meta.
Lösung
Als Workaround kann ein Dienst wie rss.app verwendet werden, um Instagram-Posts in einen RSS-Feed zu konvertieren. Dieser RSS-Feed kann dann vom Feeds-AddOn ausgelesen werden.
Schritt 1: RSS-Feed erstellen
- Auf rss.app registrieren
- Neuen Feed erstellen: “Create new feed from…”
- Instagram-Profil-URL eingeben
- RSS-Feed-URL kopieren
Schritt 2: Feed in REDAXO einrichten
- Im Backend zu “Feeds” navigieren
- Neuen Stream anlegen
- Typ: “RSS Feed”
- URL: Die RSS-Feed-URL von rss.app einfügen
Schritt 3: Feed im Frontend ausgeben
<?php
$stream = rex_feed::getStream('instagram');
$items = $stream->getItems();
foreach ($items as $item) {
echo '<div class="instagram-post">';
echo '<img src="' . $item->getMedia() . '" alt="">';
echo '<p>' . $item->getContent() . '</p>';
echo '</div>';
}
Alternative Dienste
| Dienst | Beschreibung | Preis |
|---|---|---|
| rss.app | Instagram zu RSS | Freemium |
| Zapier | Automation-Plattform | Freemium |
| IFTTT | Einfache Automatisierung | Free |
| Later | Social Media Management | Kostenpflichtig |
Besserer Ansatz: Instagram Graph API
Für professionelle Anwendungen empfiehlt sich die direkte Nutzung der Instagram Graph API:
Voraussetzungen
- Facebook Developer Account
- Instagram Business oder Creator Account
- Facebook Page mit verknüpftem Instagram
API-Zugriff
<?php
class InstagramFeed
{
private string $accessToken;
private string $userId;
public function __construct(string $accessToken, string $userId)
{
$this->accessToken = $accessToken;
$this->userId = $userId;
}
public function getMedia(int $limit = 10): array
{
$url = sprintf(
'https://graph.instagram.com/%s/media?fields=id,caption,media_type,media_url,permalink,timestamp&limit=%d&access_token=%s',
$this->userId,
$limit,
$this->accessToken
);
$response = rex_socket::factoryUrl($url)->doGet();
if ($response->isOk()) {
$data = json_decode($response->getBody(), true);
return $data['data'] ?? [];
}
return [];
}
}
// Verwendung
$instagram = new InstagramFeed(
rex_config::get('project', 'instagram_token'),
rex_config::get('project', 'instagram_user_id')
);
$posts = $instagram->getMedia(6);
foreach ($posts as $post) {
echo '<a href="' . $post['permalink'] . '">';
echo '<img src="' . $post['media_url'] . '" alt="">';
echo '</a>';
}
Token-Refresh (Cronjob)
Instagram-Tokens laufen nach 60 Tagen ab und müssen erneuert werden:
<?php
// Als Cronjob einrichten
class InstagramTokenRefresh
{
public static function execute(): bool
{
$token = rex_config::get('project', 'instagram_token');
$url = sprintf(
'https://graph.instagram.com/refresh_access_token?grant_type=ig_refresh_token&access_token=%s',
$token
);
$response = rex_socket::factoryUrl($url)->doGet();
if ($response->isOk()) {
$data = json_decode($response->getBody(), true);
if (isset($data['access_token'])) {
rex_config::set('project', 'instagram_token', $data['access_token']);
return true;
}
}
return false;
}
}
Hinweis
Die Instagram API ändert sich regelmäßig. Es empfiehlt sich, die offizielle Dokumentation zu konsultieren und einen Fallback-Mechanismus zu implementieren.