RSS转JSON转换器偶发失效,PHP调用API获取Medium内容异常求助
排查Medium RSS转JSON无输出的问题
首先可以确定:API本身是正常的(你直接访问接口能拿到数据),问题大概率出在你的PHP代码逻辑里,我帮你拆解几个关键问题点:
1. 最核心的问题:没有输出逻辑!
看你的代码,循环里只是对$mediumPostTitle做了截取处理,但从头到尾没有把这个变量(或者任何内容)输出到页面的代码!比如你没写echo $mediumPostTitle;或者相关HTML输出语句,哪怕数据正常获取到了,浏览器也不会显示任何内容。
2. 缺失错误处理,无法定位问题
你的代码里没有对file_get_contents和json_decode的执行结果做错误检查:
- 如果
file_get_contents因为服务器配置(比如allow_url_fopen未开启)、网络问题或者API限流失败,会返回false,这时候json_decode(false)会得到null,导致if ($data)判断不成立,直接跳过循环,自然没输出。 - 如果JSON解析失败,也会得到
null,同样进入不了后续逻辑。
3. 冗余的字符串截取&变量重复使用
- 你连续调用了两次
mb_strimwidth,其实一次就够:$mediumPostTitle = mb_strimwidth($item['title'], 0, 57, '...');,第一次截到60再截到57完全没必要。 - 初始的
$data变量(存储Medium主页地址)和后面存储JSON解析结果的$data重名,虽然语法没问题,但容易混淆调试。
修复后的示例代码
<?php // 重命名变量避免混淆 $medium_profile_url = "https://medium.com/@idrawcharts"; $whatIWant = substr($medium_profile_url, strpos($medium_profile_url, "@") + 1); $rss_url = 'https://medium.com/feed/@' . $whatIWant; $api_endpoint = 'https://api.rss2json.com/v1/api.json?rss_url='; $full_api_url = $api_endpoint . urlencode($rss_url); $response = file_get_contents($full_api_url); // 检查接口请求是否成功 if ($response === false) { die("无法获取API数据,请检查服务器allow_url_fopen配置或网络连接"); } $data = json_decode($response, true); // 检查JSON解析是否成功 if (json_last_error() !== JSON_ERROR_NONE) { die("JSON解析失败:" . json_last_error_msg()); } if ($data) { foreach ($data['items'] as $item) { // 简化字符串截取 $mediumPostTitle = mb_strimwidth($item['title'], 0, 57, '...'); // 添加输出逻辑,这里用简单的标题示例,你可以改成自己需要的HTML结构 echo "<div class='medium-post'><h3>{$mediumPostTitle}</h3><p><a href='{$item['link']}' target='_blank'>查看原文</a></p></div>"; } } else { echo "没有获取到文章数据"; } ?>
调试建议
- 先运行修复后的代码,看是否能正常输出内容。
- 如果还是报错,根据页面显示的错误信息(比如
allow_url_fopen未开启)去调整服务器配置。 - 可以先
var_dump($data)看看解析后的JSON结构是否符合预期,确保$data['items']是存在的数组。
内容的提问来源于stack exchange,提问作者cpcdev
相关产品推荐
相关产品推荐

