Update mastodonapi.php

This commit is contained in:
simonpipe 2026-05-27 08:35:04 +02:00
parent baaa18d817
commit 1e461693ef

View file

@ -80,7 +80,6 @@ class YellowMastodonapi {
$apiUrl = rtrim($instanceUrl, "/") . "/api/v1/accounts/" . $accountId . "/statuses?limit=" . $limit; $apiUrl = rtrim($instanceUrl, "/") . "/api/v1/accounts/" . $accountId . "/statuses?limit=" . $limit;
// FIX: Browser-ähnlicher User-Agent, da Snac strikt blockiert
$headers = array("User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) YellowMastodonapi/" . self::VERSION); $headers = array("User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) YellowMastodonapi/" . self::VERSION);
if ( !empty($accessToken) ) $headers[] = "Authorization: Bearer " . $accessToken; if ( !empty($accessToken) ) $headers[] = "Authorization: Bearer " . $accessToken;
@ -90,7 +89,7 @@ class YellowMastodonapi {
CURLOPT_FOLLOWLOCATION => true, CURLOPT_FOLLOWLOCATION => true,
CURLOPT_TIMEOUT => 30, CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => $headers, CURLOPT_HTTPHEADER => $headers,
CURLOPT_SSL_VERIFYPEER => false, // FIX: Kompatibilität für GoToSocial/Snac erhöht CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_SSL_VERIFYHOST => 0 CURLOPT_SSL_VERIFYHOST => 0
)); ));
$json = curl_exec($ch); $json = curl_exec($ch);
@ -101,23 +100,45 @@ class YellowMastodonapi {
$posts = json_decode($json, true); $posts = json_decode($json, true);
if ( !is_array($posts) ) return false; if ( !is_array($posts) ) return false;
echo "DEBUG: " . count($posts) . " Posts von API empfangen.\n";
$postsCreated = 0; $postsCreated = 0;
foreach ( $posts as $post ) { foreach ( $posts as $post ) {
if ( !empty($post["reblog"]) || ( !empty($post["reblogged"]) && $post["reblogged"]===true ) ) continue; // FIX: Reblog-Erkennung robuster für Snac
if ( !is_null($post["in_reply_to_id"]) ) continue; if ( !empty($post["reblog"]) || (isset($post["reblogged"]) && $post["reblogged"]===true) ) {
continue;
}
// FIX: Snac sendet leere Strings "" statt null bei in_reply_to_id
if ( !empty($post["in_reply_to_id"]) ) {
continue;
}
$contentHtml = $post["content"] ?? ""; $contentHtml = $post["content"] ?? "";
$createdAt = $post["created_at"] ?? ""; $createdAt = $post["created_at"] ?? "";
if ( $maxAgeHours > 0 ) { if ( $maxAgeHours > 0 ) {
if ( strtotime($createdAt) < ( time() - ( $maxAgeHours * 3600 ) ) ) continue; if ( strtotime($createdAt) < ( time() - ( $maxAgeHours * 3600 ) ) ) {
echo "DEBUG: Post übersprungen (zu alt): " . mb_substr(strip_tags($contentHtml), 0, 30) . "...\n";
continue;
}
} }
$tags = array_column($post["tags"] ?? array(), "name"); $tags = array_column($post["tags"] ?? array(), "name");
if ( !empty($hashtag) && !in_array(strtolower($hashtag), array_map("strtolower", $tags)) ) continue; if ( !empty($hashtag) && !in_array(strtolower($hashtag), array_map("strtolower", $tags)) ) {
echo "DEBUG: Post übersprungen (Hashtag #$hashtag fehlt): " . mb_substr(strip_tags($contentHtml), 0, 30) . "...\n";
continue;
}
$title = $this->generateTitle($contentHtml); $title = $this->generateTitle($contentHtml);
$titleSlug = $this->generateTitleSlug($title); $titleSlug = $this->generateTitleSlug($title);
$fileName = date("Y-m-d", strtotime($createdAt)) . "-" . $titleSlug . ".md"; $fileName = date("Y-m-d", strtotime($createdAt)) . "-" . $titleSlug . ".md";
$fullPath = $this->yellow->system->get("coreServerDocument") . $targetFolder . $fileName; $fullPath = $this->yellow->system->get("coreServerDocument") . $targetFolder . $fileName;
if ( file_exists($fullPath) ) continue;
if ( file_exists($fullPath) ) {
echo "DEBUG: Post übersprungen (Datei existiert bereits: $fileName)\n";
continue;
}
if ( !is_dir(dirname($fullPath)) ) { if ( !is_dir(dirname($fullPath)) ) {
mkdir(dirname($fullPath), 0777, true); mkdir(dirname($fullPath), 0777, true);
@ -135,14 +156,19 @@ class YellowMastodonapi {
} }
} }
} }
$authorName = !empty($post["account"]["display_name"]) ? $post["account"]["display_name"] : $defaultAuthor;
$authorUrl = !empty($post["account"]["url"]) ? $post["account"]["url"] : "#";
$markdownContent = $this->generateMarkdown( $markdownContent = $this->generateMarkdown(
$title, $titleSlug, $createdAt, $contentHtml, $title, $titleSlug, $createdAt, $contentHtml,
$post["account"]["display_name"] ?: $defaultAuthor, $authorName, $authorUrl,
$post["account"]["url"] ?: "#",
$defaultAuthor, $defaultTag, $imageFilenames, $imageAltTexts, $statusSetting $defaultAuthor, $defaultTag, $imageFilenames, $imageAltTexts, $statusSetting
); );
file_put_contents($fullPath, $markdownContent); file_put_contents($fullPath, $markdownContent);
chmod($fullPath, 0666); chmod($fullPath, 0666);
echo "-> Erstellt: $fileName\n";
$postsCreated++; $postsCreated++;
} }
return $postsCreated; return $postsCreated;