Reddit api nodejs

Hiện nay các ứng dụng thương mại điện tử (TMĐT hay thương mại điện tử) được các nhà lập trình phát triển một cách xuất sắc từ quản lý đơn hàng để chịu tải với hiệu suất cao, tính chất quản lý dữ liệu tốt nhất khi sử dụng Microservices. Đó là những yếu tố tạo nên một hệ thống bền vững cho các ứng dụng như Shopee, lazada, alibaba, alimama và aliconcon

Tôi chọn một người lười biếng để làm một công việc khó khăn. Bởi vì một người lười biếng sẽ tìm ra cách dễ dàng để làm điều đó. - Bill Gates

Open post

Bác Gates đã bảo răng bác luôn muốn chọn những người lười biếng vì họ sẽ tìm ra cách thực hiện công việc đó một cách đơn giản hơn. Hơn nữa, đôi khi có một số công việc chán nản phải đi lặp lại nhiều lần, trong một ngày. Với một nhà phát triển thì tại sao không tìm thấy cách nào mà nhàn nhã hơn để làm? . Sau đó, các bạn có thể áp dụng vào công việc chính hiện tại của các bạn như gửi thư, tự động chúc mừng sinh nhật trên Facebook và hàng tá công việc khác nữa

Áp dụng

Để áp dụng, mình sẽ hướng dẫn các bạn viết một kịch bản vui vui để áp dụng thử tự động hóa một số việc đơn giản. Mình sẽ viết một script lấy bài từ Subreddit r/listentothis và post lên Facebook Page bằng NodeJS mỗi giờ một lần

Serie bao gồm hai phần

  • viết kịch bản
  • Tự động hóa bằng Heroku
Code any

Đầu tiên là mình sẽ viết kịch bản để nó tự động lấy bài bên Subreddit và đăng lên Facebook Page. Các bước cụ thể sẽ như sau

  1. Create project
  2. Config Api của Red Red
  3. Nhận bài đăng ngẫu nhiên từ Subreddit r/listentothis
  4. Định cấu hình API trang Facebook
  5. Đăng status lên Facebook Page
Create project

Ở đây mình sẽ sử dụng NodeJS cùng một số gói như snoowrap cho Reddit API và tìm nạp nút để đăng bài lên Trang. Ngoài ra, sử dụng thêm dotenv để định cấu hình các biến envionement nữa thôi. Dễ dàng

npm init -y
touch index.js
npm i snoowrap node-fetch dotenv
Config Bít Đỏ

Để Config Bít Đỏ thì mình dùng gói Snoowrap. Thiết lập bao gồm hai bước là tạo Ứng dụng Reddit và tạo Mã thông báo vĩnh viễn

Tạo ứng dụng Reddit

Đầu tiên, các bạn vào https. //www. reddit. com/prefs/apps để tạo Ứng dụng Reddit

Reddit api nodejs

Trong mục Redirect URL, hãy nhớ nhập url https. // not-an-aardvark. github. io/reddit-oauth-helper/ nhé. Nó sẽ giúp bạn tạo Token vĩnh viễn nhanh hơn

Sau khi tạo xong thì save lại Client ID và Client Secret lại

Tạo Token vĩnh viễn

Tạo Token vĩnh viễn, các bạn tiếp tục vào https. // not-an-aardvark. github. io/reddit-oauth-helper/. Sau đó điền Client Secret và Client ID vào. Nhớ tick vào Permanent sau đó tạo Token. Kéo xuống bên dưới nó sẽ hiện Mã thông báo. Lưu tiếp 2 cái Token đó lại là xong

Reddit api nodejs

Lấy bài đăng ngẫu nhiên từ Subreddit

Đến đây mình bắt đầu vào file

const fetch = require("node-fetch");
const snoowrap = require("snoowrap");
require("dotenv").config();

(async () => {
  try {
    // Config Snoowrap
    const r = new snoowrap({
      userAgent:
        "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36",
      clientId: process.env.REDDIT_CLIENT_ID,
      clientSecret: process.env.REDDIT_CLIENT_SECRET,
      refreshToken: process.env.REDDIT_REFRESH_TOKEN
    });

    // Get Sub Reddit
    const subReddit = r.getSubreddit("listentothis");

    // Get Random post
    const randomPost = await subReddit.getRandomSubmission();
    console.log(randomPost);
  } catch (error) {
    console.error(error);
  }
})();
2 để bắt đầu Code

const fetch = require("node-fetch");
const snoowrap = require("snoowrap");
require("dotenv").config();

(async () => {
  try {
    // Config Snoowrap
    const r = new snoowrap({
      userAgent:
        "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36",
      clientId: process.env.REDDIT_CLIENT_ID,
      clientSecret: process.env.REDDIT_CLIENT_SECRET,
      refreshToken: process.env.REDDIT_REFRESH_TOKEN
    });

    // Get Sub Reddit
    const subReddit = r.getSubreddit("listentothis");

    // Get Random post
    const randomPost = await subReddit.getRandomSubmission();
    console.log(randomPost);
  } catch (error) {
    console.error(error);
  }
})();

Kết quả sẽ trả về Đối tượng một bài đăng ngẫu nhiên từ Subreddit r/listentothis. Ở đây mình sẽ lấy demo 3 giá trị thôi. Tiêu đề, Tác giả và Url của bài bát đó

const messageData = {
    url: randomPost.url,
    author: randomPost.author.name,
    title: randomPost.title
};

Kết quả như sau

{ url: 'https://youtube.com/watch?v=eiHvJVHzrvM',
  author: 'Encyclopedia_Green',
  title: '100 Proof Haze - Jimmy Mack [rap/hiphop]' 
}
Cấu hình API trang Facebook

Tiếp theo là bạn phải tạo Trang, sau đó tạo Ứng dụng trên Facebook Developer. And get token vĩnh viễn. Các bạn chưa biết cách lấy Token vĩnh viễn thì xem tại đây nhé. Đoạn này nhiều bài hướng dẫn nên mình lười viết lại quá

Đăng Trạng thái lên Trang

Tiếp theo là mình post status lên Page bằng Facebook Page API thôi

// Post Status
    const access_token = process.env.FACEBOOK_ACCESS_TOKEN;
    const messageData = {
      url: randomPost.url,
      author: randomPost.author.name,
      title: randomPost.title
    };
    const messageTemplate = `Listen and enjoy to this song ${messageData.title} | Credit: ${messageData.author}
  `;
    const url = `https://graph.facebook.com/v5.0/101580544646661/feed?message=${messageTemplate}&link=${messageData.url}&access_token=${access_token}`;
    const postStatus = await fetch(url, {
      method: "POST"
    });
    const response = await postStatus.json();
    console.log(response);
Kiểm tra thử

Bật Tơ Mi Nồ lên và gõ

const fetch = require("node-fetch");
const snoowrap = require("snoowrap");
require("dotenv").config();

(async () => {
  try {
    // Config Snoowrap
    const r = new snoowrap({
      userAgent:
        "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36",
      clientId: process.env.REDDIT_CLIENT_ID,
      clientSecret: process.env.REDDIT_CLIENT_SECRET,
      refreshToken: process.env.REDDIT_REFRESH_TOKEN
    });

    // Get Sub Reddit
    const subReddit = r.getSubreddit("listentothis");

    // Get Random post
    const randomPost = await subReddit.getRandomSubmission();
    console.log(randomPost);
  } catch (error) {
    console.error(error);
  }
})();
3 để kiểm tra. If results as after is CHÍNH XÁC

{ id: '101580544646661_102170374587678' }
Kết luận

Đến đây coi như đã xong cái script đơn giản, tự động lấy bài bên Reddit để post qua Facebook Page rồi nhé. Các bạn có thể xem thử kết quả ở Trang http. //fb. com/listenthisawesomesong của mình. Source Code của script này mình ở đây https. //github. com/nguyen47/listen-to-Phần này sau mình sẽ giới thiệu cách tự động hóa việc này bằng Heroku. Đơn giản và không tốn kém chi phí gì cả

Hiện tại mình đang viết blog tập tin tại địa chỉ https. //htknguyen. com/. Nếu bạn nào có hứng thú thì ghé vào blog của mình nghe mình chém gió loạn lên dưới góc độ một thằng Developer cùi nhé. bắn tim