diff --git a/mastodonapi.php b/mastodonapi.php index e2f55d4..1716ed7 100644 --- a/mastodonapi.php +++ b/mastodonapi.php @@ -142,33 +142,45 @@ class YellowMastodonapi { // Download and save image private function downloadAndSaveImage($media, $dirPath) { - $imageUrl = $media["remote_url"] ?? $media["url"] ?? $media["preview_url"] ?? null; - if ( empty($imageUrl) ) return false; - - if ( !is_dir($dirPath) ) { - mkdir($dirPath, 0777, true); - chmod($dirPath, 0777); + $imageUrl = $media['remote_url'] + ?? $media['url'] + ?? $media['preview_url'] + ?? ($media['meta']['original']['url'] ?? null) + ?? ($media['meta']['small']['url'] ?? null); + + if (empty($imageUrl)) { + return false; } + if (!is_dir($dirPath)) mkdir($dirPath, 0755, true); + $fileName = basename(parse_url($imageUrl, PHP_URL_PATH)); $fullPath = $dirPath . $fileName; - - if ( file_exists($fullPath) ) return $fileName; - + if (file_exists($fullPath)) return $fileName; + $ch = curl_init($imageUrl); - curl_setopt_array($ch, array( + $headers = ["User-Agent: YellowMastodonAPI"]; + $accessToken = $this->yellow->system->get("mastodonapiAccessToken"); + if (!empty($accessToken)) { + $headers[] = "Authorization: Bearer " . $accessToken; + } + curl_setopt_array($ch, [ CURLOPT_RETURNTRANSFER => true, CURLOPT_FOLLOWLOCATION => true, CURLOPT_TIMEOUT => 30, - CURLOPT_USERAGENT => "YellowMastodonapi/" . self::VERSION, + CURLOPT_HTTPHEADER => $headers, CURLOPT_SSL_VERIFYPEER => true, - )); + CURLOPT_SSL_VERIFYHOST => 2, + ]); $imgData = curl_exec($ch); + $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); - - if ( !$imgData ) return false; + + if ($imgData === false || $httpCode < 200 || $httpCode >= 300) { + return false; + } + file_put_contents($fullPath, $imgData); - chmod($fullPath, 0666); return $fileName; }