默认 321 6

    使用PHP获取 Mastodon API数据

    AI摘要:DeepSeek AI摘要 DeepSeek
    文章介绍了如何使用PHP从Mastodon API获取数据并保存为本地JSON文件。通过设置用户ID和实例地址,使用cURL请求API,循环获取最多1000条非转发的状态数据,并将其保存为toot.json文件。该方法解决了Cloudflare Workers获取API数据较慢的问题,并通过计划任务定时更新数据。

    根据 Cloudflare Workers 获取API 拉取的时候有些慢,所以使用php 获取到json 数据并保存在本地,通过计划任务定时生成.

    <?php
    $userId = '110711427149362311'; //改为自己的
    $instance = 'jiong.us'; //改为自己的
    $baseUrl = 'https://' . $instance . '/api/v1/accounts/' . $userId . '/statuses';
    $limit = 20; // Maximum limit per page
    $toots = [];
    
    for ($i = 0; $i < 25; $i++) { // 25 pages * 40 toots per page = 1000 toots
        $ch = curl_init();
        $url = $baseUrl . '?limit=' . $limit;
    
        if (isset($lastId)) {
            $url .= '&max_id=' . $lastId;
        }
    
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        //curl_setopt($ch, CURLOPT_HTTPHEADER, [
        //    'Authorization: Bearer ' . $accessToken
        //]);
    
        $response = curl_exec($ch);
        curl_close($ch);
    
        $data = json_decode($response, true);
    
        if (empty($data)) {
            break;
        }
    
        foreach ($data as $toot) {
            if (!isset($toot['reblog']) && !isset($toot['in_reply_to_id'])) {
                $toots[] = $toot;
            }
        }
    
        $lastId = end($data)['id'];
    }
    
    // Now $toots contains up to 1000 toots
    $jsonData = json_encode($toots, JSON_PRETTY_PRINT);
    file_put_contents('toot.json', $jsonData);
    ?>

    保存为toot.php, 访问 toot.php 则会在同级目录生成 toot.json.

    创建一个定时任务定时访问toot.php

    1. 肖寒武

      2024-12-13 17:31
      中国 浙江省 杭州

      我还没用过mastodon,只记得去年有段时间各大博友都在推这个。

        1. 老孙

          2024-12-13 18:12
          新加坡 淡馬錫
          @肖寒武

          web3.0时代 去中心化很重要

    2. acevs

      2024-12-13 16:46
      日本 东京都 东京

      我用n8n 获取过Mastodon API 就是为了同步wp的文章。
      先mark~

        1. 老孙

          2024-12-13 16:50
          新加坡 淡馬錫
          @acevs

          Wordpress 也有说说的功能吧 也可以使用Wordpress RestAPI 同步

            1. acevs

              2024-12-13 18:09
              阿根廷 布宜诺斯艾利斯 布宜诺斯艾利斯
              @老孙

              有的 不过服务器得翻墙才行。翻墙我发现同步消息也是有点问题的,就把插件卸载掉了。

                1. 老孙

                  2024-12-13 18:11
                  新加坡 淡馬錫
                  @acevs

                  不用插件啊直接用AI写个同步的脚本就好了 , 如果有可能 用 github action来同步也不是不行