获取SegmentFault某个标签下的一些信息

简介: 目前SegmentFault还没有开放API,17年的时候用PHP随便写了一个获取某个标签下信息的代码,没什么技术含量,用来定时获取目的是如果有问题可以解决就帮助解决一下,或者是广告的话可以进行举报

前言


目前SegmentFault还没有开放API,17年的时候高阳大大说有计划,虽然那会我还没用SegmentFault

PHP随便写了一个获取某个标签下信息的代码,没什么技术含量,用来定时获取

目的是如果有问题可以解决就帮助解决一下,或者是广告的话可以进行举报


获取URL


主要获取标签动态下的就可以了,包含了技术问答和专栏文章

  1. 标签动态 https://segmentfault.com/t/*
  2. 技术问答 https://segmentfault.com/t/*/questions
  3. 专栏文章 https://segmentfault.com/t/*/blogs


XPath节点


PHP使用XPath采集也是还可以的,也相对简单

  1. 标签动态
  • 标题 //h4/a/text()
  • 链接 //h4/a/@href
  1. 技术问答
仔细点的话可以带一个 class属性
  • 标题 //h2[@class="title"]/a/text()
  • 链接 //h2[@class="title"]/a/@href
  1. 专栏文章
  • 标题 //h2/a/text()
  • 链接 //h2/a/@href


效果截图



1.jpg


使用


需要补全代码中的相关信息,URLXPath节点以及json文件路径

可选择使用 @Easy 的 PushBear 进行一对多推送,需要补全key


crontab定时

crontab定时任务30分钟一次,获取第一页的信息

*/30 * * * * php /www/wwwroot/tag.php >> /tmp/sf.log

PHP代码

<?php
$url = ''; // 需要采集的URL
$key = ''; // PushBear的SendKey
$title_xpath = ''; // 标题的XPath节点
$url_xpath = ''; // 对应链接的XPath节点
$json_path = "/tmp/sf.json";
$html = file_get_contents($url);
$dom = new DOMDocument();
// 从一个字符串加载HTML
@$dom->loadHTML($html);
// 使该HTML规范化
$dom->normalize();
// 用DOMXpath加载DOM,用于查询
$xpath = new DOMXPath($dom);
// 获取对应的xpath数据
$title_hrefs = $xpath->query($title_xpath); // 标题
$data = [];
for ($i = 0; $i < $title_hrefs->length; $i++) {
    $href = $title_hrefs->item($i);
    $title = $href->nodeValue;
    $data[$i]['title'] = $title;
}
// 获取对应的xpath数据
$url_hrefs = $xpath->query($url_xpath); // 链接
for ($i = 0; $i < $url_hrefs->length; $i++) {
    $href = $url_hrefs->item($i);
    $url = $href->nodeValue;
    $data[$i]['url'] = 'https://segmentfault.com'.$url;
}
$json = json_encode($data);
// 判断文件是否存在
if (file_exists($json_path)) {
    // 存在
    $old = file_get_contents($json_path);
    // 文件不同
    if ($old != $json) {
        // 替换掉 写新文件
        file_put_contents($json_path, $json);
        $oldInfo = json_decode($old, true);
        // 获取差值
        $data = getDiffArrayByTitle($data, $oldInfo);
    } else {
        // 相同就不发了
        echo date('Y-m-d H:i:s', time()). "内容相同".PHP_EOL;
          return;
    }
} else {
    // 不存在 写文件
    file_put_contents($json_path, $json);
}
$str = "";
foreach ($data as $key => $item) {
    $num = $key + 1;
    $str .= "{$num}. [{$item['title']}]({$item['url']}) \n\n";
}
// 推送
if (!empty($key)) {
    echo sendByBear('***标签动态', $str);
}
function getDiffArrayByTitle($arr1, $arr2, $pk='title'){
    $res = [];
    foreach($arr2 as $item) $tmpArr[$item[$pk]] = $item;
    foreach($arr1 as $v) if(! isset($tmpArr[$v[$pk]])) $res[] = $v;
    return $res;
}
function sendByBear($text, $desp = '', $key = '')
{
    $postData = http_build_query(
        array(
            'text' => $text,
            'desp' => $desp,
            'sendkey' => $key
        )
    );
    $opts = array('http' =>
        array(
            'method'  => 'POST',
            'header'  => 'Content-type: application/x-www-form-urlencoded',
            'content' => $postData
        )
    );
    $context = stream_context_create($opts);
    $result = file_get_contents('https://pushbear.ftqq.com/sub', false, $context);
    return $result;
}
目录
相关文章
|
2天前
|
SpringCloudAlibaba 负载均衡 Dubbo
微服务架构下Feign和Dubbo的性能大比拼,到底鹿死谁手?
本文对比分析了SpringCloudAlibaba框架下Feign与Dubbo的服务调用性能及差异。Feign基于HTTP协议,使用简单,适合轻量级微服务架构;Dubbo采用RPC通信,性能更优,支持丰富的服务治理功能。通过实际测试,Dubbo在调用性能、负载均衡和服务发现方面表现更出色。两者各有适用场景,可根据项目需求灵活选择。
338 123
微服务架构下Feign和Dubbo的性能大比拼,到底鹿死谁手?
|
1天前
|
Java 数据库 数据安全/隐私保护
Spring 微服务和多租户:处理多个客户端
本文介绍了如何在 Spring Boot 微服务架构中实现多租户。多租户允许单个应用实例为多个客户提供独立服务,尤其适用于 SaaS 应用。文章探讨了多租户的类型、优势与挑战,并详细说明了如何通过 Spring Boot 的灵活配置实现租户隔离、动态租户管理及数据源路由,同时确保数据安全与系统可扩展性。结合微服务的优势,开发者可以构建高效、可维护的多租户系统。
179 127
|
5天前
|
人工智能 JavaScript 测试技术
Qwen3-Coder入门教程|10分钟搞定安装配置
Qwen3-Coder 挑战赛简介:无论你是编程小白还是办公达人,都能通过本教程快速上手 Qwen-Code CLI,利用 AI 轻松实现代码编写、文档处理等任务。内容涵盖 API 配置、CLI 安装及多种实用案例,助你提升效率,体验智能编码的乐趣。
436 106
|
1天前
|
Web App开发 前端开发 API
在折叠屏应用中,如何处理不同屏幕尺寸和设备类型的样式兼容性?
在折叠屏应用中,如何处理不同屏幕尺寸和设备类型的样式兼容性?
212 124
|
5天前
|
JSON fastjson Java
FastJson 完全学习指南(初学者从零入门)
摘要:本文是FastJson的入门学习指南,主要内容包括: JSON基础:介绍JSON格式特点、键值对规则、数组和对象格式,以及嵌套结构的访问方式。FastJson是阿里巴巴开源的高性能JSON解析库,具有速度快、功能全、使用简单等优势,并介绍如何引入依赖,如何替换Springboot默认的JackJson。 核心API: 序列化:将Java对象转换为JSON字符串,演示对象、List和Map的序列化方法; 反序列化:将JSON字符串转回Java对象,展示基本对象转换方法;
|
6天前
|
缓存 JavaScript 前端开发
JavaScript 的三种引入方法详解
在网页开发中,JavaScript 可通过内联、内部脚本和外部脚本三种方式引入 HTML 文件,各具适用场景。本文详解其用法并附完整示例代码,帮助开发者根据项目需求选择合适的方式,提升代码维护性与开发效率。
211 110