资讯专栏INFORMATION COLUMN

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

qujian / 404人阅读

摘要:前言目前还没有开放,年的时候高阳大大说有计划,虽然那会我还没用用随便写了一个获取某个标签下信息的代码,没什么技术含量,用来定时获取目的是如果有问题可以解决就帮助解决一下,或者是广告的话可以进行举报获取主要获取标签动态下的就可以了,包含了技术

前言

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

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

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

获取URL

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

标签动态 https://segmentfault.com/t/*

技术问答 https://segmentfault.com/t/*/questions

专栏文章 https://segmentfault.com/t/*/blogs

XPath节点

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

标签动态

标题 //h4/a/text()

链接 //h4/a/@href

技术问答

仔细点的话可以带一个class属性

标题 //h2[@class="title"]/a/text()

链接 //h2[@class="title"]/a/@href

专栏文章

标题 //h2/a/text()

链接 //h2/a/@href

效果截图

使用

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

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

crontab定时

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

*/30 * * * * php /www/wwwroot/tag.php >> /tmp/sf.log
PHP代码
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"]}) 

";
}

// 推送
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;
}
结语

放个Github仓库链接,如果本文有侵权思否官方可以删除

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/31018.html

相关文章

  • Segmentfault的热门标签,可视化展示?

    摘要:结论居首位,紧随其后,位列第三。数据库方面问题最多的还是。在各种技术名词的标签下,还冒出一个程序员标签,排名第位。 结论 JavaScript居首位,HTML5紧随其后,Python位列第三。 注:数据来源于569页标签页面的11,380 条记录 showImg(https://segmentfault.com/img/bVXMRf?w=1178&h=548);showImg(http...

    rottengeek 评论0 收藏0
  • Segmentfault的热门标签,可视化展示?

    摘要:结论居首位,紧随其后,位列第三。数据库方面问题最多的还是。在各种技术名词的标签下,还冒出一个程序员标签,排名第位。 结论 JavaScript居首位,HTML5紧随其后,Python位列第三。 注:数据来源于569页标签页面的11,380 条记录 showImg(https://segmentfault.com/img/bVXMRf?w=1178&h=548);showImg(http...

    gecko23 评论0 收藏0
  • Django 学习小组:博客开发实战第四周——标签云与文章归档

    摘要:本教程内容已过时,更新版教程请访问博客开发入门教程。表示降序排列,默认是升序排列。学习小组简介学习小组是一个促进新手互相学习互相帮助的组织。我们会将每周的详细开发文档和代码通过邮件列表发出。 本教程内容已过时,更新版教程请访问: django 博客开发入门教程。 通过前四周的时间我们开发了一个简单的个人 Blog,教程地址: 第一周:Django 学习小组:博客开发实战第一周教程 ——...

    RichardXG 评论0 收藏0
  • 同源策略与JS跨域(JSONP , CORS)

    摘要:由此可以看出,同源策略确实是必不可少的,那么它会带来哪些限制呢和无法读取。由于浏览器的同源策略,在网页端出现了这个跨域的问题,然而我们发现,所有的属性并没有受到相关的限制,比如等。 本文按照政治问答题必备套路分为以下3个部分: 为什么要跨域? 跨域是什么? 如何实现跨域? Section1、为什么要跨域? 自古以来(1995年起),为了用户的信息安全,浏览器就引入了同源策略。那么同...

    Shisui 评论0 收藏0
  • CSS学习笔记(十六) CSS最佳实践之可维护性篇

    摘要:国内各大公司都已经投入使用,在一些常见的网站,如淘宝腾讯小米等移动站点,随处可见其踪影。变革之腾讯手机淘宝的设计与实现前端乱炖适配总结样式重置上文已提及,这里推荐阅读同学写的专题文章。 前言 CSS代码难维护众所皆知。 为一个元素设置样式的方式可以通过定义的class、定义的id、元素的标签名、元素的属性等选择器以及这些选择器的组合来实现; 作用于某个元素上的样式又可能来自单个样式规...

    newtrek 评论0 收藏0

发表评论

0条评论

qujian

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<