【NodeJS案例】NodeJS搭建的自动抓取微博整理到微信的网站

【NodeJS案例】NodeJS搭建的自动抓取微博整理到微信的网站

上个月利用零碎的时间弄了这么一个网站,闲着蛋疼还注册了一个域名 http://weixinqikan.com . 这个网站的功能就是你可以把你的微信公众帐号绑定到上面,然后可以关联相关的微博,将微博的内容应用到你的微信公众帐号上面。如果有需要的使用的朋友可以给我发信。

19 回复

【NodeJS案例】NodeJS搭建的自动抓取微博整理到微信的网站

上个月利用零碎的时间弄了这么一个网站,闲着蛋疼还注册了一个域名 http://weixinqikan.com. 这个网站的功能就是你可以把你的微信公众账号绑定到上面,然后可以关联相关的微博,将微博的内容应用到你的微信公众账号上面。如果有需要的用户可以给我发信。

技术栈

  • 前端:HTML, CSS, JavaScript (jQuery)
  • 后端:Node.js (Express框架)
  • 数据库:MongoDB
  • API接口:微博API, 微信公众平台API

系统架构

  1. 用户通过前端界面输入微博和微信账号信息。
  2. 后端通过微博API抓取微博内容。
  3. 抓取后的微博内容存储在MongoDB中。
  4. 定时任务定期从数据库中读取微博内容,并通过微信API发布到用户的微信公众号。

示例代码

1. 安装依赖

首先,确保安装了必要的Node.js依赖包:

npm install express mongoose axios
2. 创建Express服务器
// server.js
const express = require('express');
const mongoose = require('mongoose');

const app = express();
app.use(express.json());

mongoose.connect('mongodb://localhost/weibo-wechat', { useNewUrlParser: true, useUnifiedTopology: true });

// 定义微博模型
const WeiboSchema = new mongoose.Schema({
    user_id: String,
    content: String,
    created_at: Date
});

const Weibo = mongoose.model('Weibo', WeiboSchema);

app.post('/bind', (req, res) => {
    const { weibo_id, wechat_id } = req.body;
    // 保存绑定信息到数据库
    res.send({ message: '绑定成功' });
});

app.listen(3000, () => console.log('Server running on port 3000'));
3. 抓取微博内容
// weibo.js
const axios = require('axios');

async function fetchWeiboContent(user_id) {
    try {
        const response = await axios.get(`https://api.weibo.com/2/statuses/user_timeline.json?uid=${user_id}`);
        const weibos = response.data.statuses.map(status => ({
            user_id,
            content: status.text,
            created_at: new Date(status.created_at)
        }));
        return weibos;
    } catch (error) {
        console.error(error);
        return [];
    }
}

module.exports = fetchWeiboContent;
4. 发布到微信公众号
// wechat.js
const axios = require('axios');

async function sendToWeChat(content) {
    try {
        const response = await axios.post('https://api.weixin.qq.com/cgi-bin/message/custom/send', {
            touser: 'USER_ID',
            msgtype: 'text',
            text: {
                content: content
            }
        }, {
            headers: {
                'Authorization': `Bearer ACCESS_TOKEN`
            }
        });
        return response.data;
    } catch (error) {
        console.error(error);
        return null;
    }
}

module.exports = sendToWeChat;
5. 定时任务
// scheduler.js
const cron = require('node-cron');
const fetchWeiboContent = require('./weibo');
const sendToWeChat = require('./wechat');

cron.schedule('*/10 * * * *', async () => {
    const weibos = await fetchWeiboContent('USER_ID');
    for (let weibo of weibos) {
        await sendToWeChat(weibo.content);
    }
});

以上代码只是一个简单的示例,实际项目中需要处理更多的细节,比如错误处理、用户认证等。希望这个案例能给你一些启发!


不错。主页面东西少了点。

嗯 没时间弄 而且这个本来就是想要开放给所有人用的 只是开放和推广还弄得不怎么样,玩玩先。

我觉得很不错哦,能不能发一份我学习学习,到邮箱:renhongji@qq.com

不错的啊 学习了

不错啊 楼主发一份谢谢

有创意

很不错哦,能不能发一份我学习一下吗,到邮箱:cjingzm@126.com。谢谢!!!

不错 能发我一份吗? 邮箱: mq1980@tom.com

不错 能发我一份吗? 邮箱: mq1980@tom.com

看不到效果,能发我一份吗? xiao345@gmail.com

求源码学习,iweisi@qq.com

楼主部署到哪里去的呢。国内貌似只有百度云和阿里云支持node,国外用了heroku,还各种问题

楼主,来份源码学习 dandeliontin@gmail.com

感谢楼主 求份源码学习 c060604@163.com

看到的楼上的邮箱们以为自己误入了 csdn

这个案例涉及到多个技术点,包括抓取微博数据、处理用户认证以及将数据发送到微信公众号。以下是一些核心步骤和示例代码:

1. 微博抓取

首先需要使用微博API或者网页抓取来获取微博数据。这里以API为例:

const axios = require('axios');

async function fetchWeiboData(userId) {
    const weiboApiUrl = `https://api.example.com/weibo/${userId}`;
    try {
        const response = await axios.get(weiboApiUrl);
        return response.data;
    } catch (error) {
        console.error("Error fetching Weibo data:", error);
        return null;
    }
}

2. 微信公众号授权与消息发送

微信公众号需要先通过OAuth2.0进行授权,然后可以使用微信的模板消息或其他方式发送微博数据。

const crypto = require('crypto');
const request = require('request-promise-native');

async function sendWeiboToWechat(openId, weiboContent) {
    const accessToken = await getAccessToken();
    const url = `https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=${accessToken}`;
    const data = {
        touser: openId,
        template_id: 'your-template-id',
        data: {
            first: { value: '来自微博的新消息', color: '#173177' },
            keyword1: { value: weiboContent },
            remark: { value: '详情请点击链接查看详情' }
        }
    };
    
    try {
        await request.post({ url, json: data });
        console.log('Message sent successfully');
    } catch (error) {
        console.error('Error sending message:', error);
    }
}

function getAccessToken() {
    // 实现获取access_token逻辑
}

3. 用户界面

前端页面可以简单实现用户登录和设置功能,例如绑定微信公众号和选择微博账号。

<!DOCTYPE html>
<html>
<head>
    <title>微博到微信</title>
</head>
<body>
    <h1>绑定微信公众账号</h1>
    <form action="/bind" method="post">
        <label for="openid">OpenID:</label>
        <input type="text" id="openid" name="openid"><br><br>
        <button type="submit">绑定</button>
    </form>
</body>
</html>

4. 数据存储

可以使用数据库(如MongoDB)存储用户的微博和微信信息。

const mongoose = require('mongoose');

const UserSchema = new mongoose.Schema({
    openid: String,
    weiboUserId: String,
    weiboData: Array
});

const User = mongoose.model('User', UserSchema);

async function saveUserData(user) {
    const newUser = new User(user);
    await newUser.save();
}

以上代码仅为简化版示例,实际开发中还需考虑安全性、错误处理及优化等多方面因素。希望这些代码对你有所帮助!

回到顶部