Ruby를 사용하여 Orbit 작업공간에 개발자 설명을 추가하는 방법

26943 단어 tutorialruby
개발자 커뮤니티는 이미 가장 빨리 발전하는 개발자 블로그 플랫폼 중의 하나가 되었다.당신이 DEV 블로그에 주로 글을 올리든지, 주요 내용원에서 교차 글을 올리든지, 사용자가 남긴 댓글을 파악하는 것은 매우 중요하다.참여를 시도하는 사람들에게 대답을 받지 못한 것보다 더 우울한 것은 없다.
이 단계별 자습서에서는 DEV API 및 Orbit API를 사용하여 블로그 게시물 설명을 검색하고 이를 사용자 정의 활동으로 Orbit에 추가합니다.

tl;dr 이 강좌를 건너뛰려면 GitHub 에서 프로젝트에 설치된 모든 프로젝트 코드를 찾을 수 있습니다.

선결 조건


이 자습서의 단계를 완료하려면 다음 사항이 필요합니다.
  • 로컬 설치 Ruby 2.7 이상
  • 궤도 계좌.아직 없는 경우 Orbit API를 사용하여 구축을 시작할 수 있습니다sign up today.계정이 있으면 계정 설정에서 API 토큰을 찾을 수 있습니다.
  • 계좌 하나.DEV 계정이 있으면 응용 프로그램에서 API 키를 생성할 수 있습니다.
  • DEV API에 연결


    DEV API에서 두 개의 독립된 API 엔드포인트에 액세스하여 블로그 게시물에 대한 의견을 얻어야 합니다.즉, 우리는 문장 목록을 검색하고, 그 다음에 모든 문장의 평론을 검색해야 한다.

    게시된 글 목록 가져오기


    첫 번째 조작GET Published Articles은 여러 개의 조회 파라미터를 받아들인다.우리는 username 파라미터를 사용할 것이다.username 매개 변수는 특정 사용자의 글을 검색하는 범위를 좁힐 수 있습니다.
    다음은 기사 개발 HTTP 요청입니다.
    url = URI("https://dev.to/api/articles?username=#{@username}")
    https = Net::HTTP.new(url.host, url.port)
    https.use_ssl = true
    
    request = Net::HTTP::Get.new(url)
    
    response = https.request(request)
    
    articles = JSON.parse(response.body)
    
    코드에서 #{@username}를 검색 중인 개발자 사용자의 사용자 이름으로 바꿉니다.
    우리는 현재 articles 목록을 사용하여 모든 글의 평론을 검색할 수 있다.

    각 기사에 대한 의견 얻기


    일단 DEV에서 온 글 목록이 생기면 다음 DEV API 노드 GET Comments by Article ID 를 계속 방문할 수 있습니다.이 끝점은 항목 ID를 질의 매개 변수로 사용해야 합니다.
    코드에 반복기를 구축하여 기사 목록을 반복적으로 살펴보고 각 기사에 대한 의견을 요청합니다.
    comments = articles.each do |article|
      get_article_comments(article["id"])
    end
    
    def get_article_comments(id)
      url = URI("https://dev.to/api/comments?a_id=#{id}")
      https = Net::HTTP.new(url.host, url.port)
      https.use_ssl = true
    
      request = Net::HTTP::Get.new(url)
    
      response = https.request(request)
    
      comments = JSON.parse(response.body)
    
      return if comments.nil? || comments.empty?
    
      filter_comments(comments)
    end
    
    우선, 우리는 articles의 모든 문장을 훑어보고 #get_article_comments라는 방법을 호출하여 문장의 ID를 방법의 매개 변수로 전달한다.
    다음에 우리는 #get_article_comments 방법을 만들었다.이 메서드는 DEV API 끝점에 HTTP 요청을 보냅니다.방법의 끝에, 우리는 아직 만들어지지 않은 다른 방법을 실행한다. #filter_comments다음 방법에서 우리는 모든 종류datetime 필터를 추가할 수 있다. 만약에 우리가 대량의 개발자 블로그 평론을 처리한다면 우리는 이를 제한 범위의 한 방식으로 데이터에 추가할 수 있다.다음 예에서는 데이터 세트를 하루 전보다 작거나 같은 것으로 제한합니다.
    def filter_comments(comments)
      comments.select do |comment|
        comment["created_at"] <= 1.day.ago
      end
    end
    

    Note: The 1.day.ago functionality in the code snippet above comes from ActiveSupport. To take advantage of it you need to add require "active_support/time" at the top of your Ruby script.


    우리는 지금 모든 평론을 가지고 있습니다. 우리는 그것들을 사용자 정의 활동으로 우리의 Orbit 작업 구역에 추가하고 싶습니다.우리 시작합시다.

    Orbit API 사용


    Orbit API를 사용하면 Orbit 작업공간에서 다양한 활동을 프로그래밍할 수 있습니다.API reference guide는 탐사의 좋은 출발점이다.목적에 따라 create a new activity for existing or new member API 작업을 사용합니다.

    API access is included with every account! Try it out by signing up today.


    새 사용자 정의 활동 만들기


    Orbit documentation API를 통해 새 활동을 트랙으로 보낼 때 작업공간에 있는 기존 멤버를 읽어들이거나 기존 멤버를 찾을 수 없을 때 새 멤버를 생성한다는 사실을 알립니다.이것은 우리가 Orbit에 HTTP 요청을 보내기만 하면 블로그 게시물 평론을 하나의 활동으로 만들고 그것을 한 구성원에게 추가할 수 있다는 것을 의미한다.
    API 참조에 따라 활동 정의activity_typetitle, 구성원identity 정보가 필요합니다.우리는 작업 영역의 기록, 예를 들어 adescription와 alink를 보충하기 위해 더 많은 묘사적인 정보를 보낼 것이다.

    사용자 정의 활성 데이터 객체 구축


    먼저 HTTP 요청에서 보낼 요청체를 구성합니다.우리는 우선 두 가지 방법#sanitize_comment#construct_commenter을 만들 것이다.DEV API에서 받은 데이터를 정리하고 올바른 트랙 형식으로 변환합니다.#sanitize_comment 메서드는 메모에서 모든 HTML 태그를 삭제하고 메시지의 본문만 남깁니다.#construct_commenter 방법은 평론자의 표지 정보를 나타내는 산열을 형성한다.개발자 리뷰어의 개발자 파일에 트위터 또는 GitHub 사용자 이름이 있으면 Orbit에 보내는 메시지에 추가합니다.
      def sanitize_comment(comment)
        comment = ActionView::Base.full_sanitizer.sanitize(comment)
    
        comment.gsub("\n", " ")
      end
    
      def construct_commenter(commenter)
        hash = {
          'name': commenter[:name],
          'username': commenter[:username]
        }
    
        unless commenter[:twitter_username].nil? || commenter[:twitter_username] == ""
          hash.merge!('twitter': commenter[:twitter_username])
        end
    
        unless commenter[:github_username].nil? || commenter[:github_username] == ""
          hash.merge!('github': commenter[:github_username])
        end
    
        hash
      end
    
      def construct_body
        @commenter = construct_commenter(@commenter)
    
        hash = {
          activity: {
            activity_type: "dev:comment",
            key: "dev-comment-#{@comment[:id]}",
            title: "Commented on the DEV blog post: #{@article_title}",
            description: sanitize_comment(@comment[:body_html]),
            occurred_at: @article[:created_at],
            link: @article[:url],
            member: {
              name: @commenter[:name],
              devto: @commenter[:username]
            }
          },
          identity: {
            source: "devto",
            username: @commenter[:username]
          }
        }
    
        hash[:activity][:member].merge!(twitter: @commenter[:twitter]) if @commenter[:twitter]
    
        hash[:activity][:member].merge!(github: @commenter[:github]) if @commenter[:github]
    
        hash
      end
    
    #construct_body 방법에서, 우리는 궤도에 보낼 모든 데이터를 산열로 만듭니다.activity_typedev:comment
  • key 필드의 사용자 정의 ID로 개발 주석 ID
  • 로 문자열 개발 주석을 삽입합니다
  • title에 블로그 제목
  • 이 추가된 DEV 블로그 기사 리뷰
  • 필드description의 주석 자체에서 모든 HTML 태그가 제거됨
  • 필드에 있는 DEV 블로그 게시물의 URL
  • 사용자 이름과 개발자 사용자 이름
  • 이 있는 linkmember 대상
  • 평론가의 개인 자료에 트위터나 GitHub 사용자 이름이 있으면 HTTP 요청 본문과 identity 대상
  • 에 추가됩니다.

    트랙에 활동 게시


    우리는 지금 우리의 데이터로 member 궤도 진입 요청을 할 준비가 되어 있다.이것은 POST 라이브러리를 사용하는 표준 Ruby HTTP 요청입니다.
    url = URI("https://app.orbit.love/api/v1/#{@workspace_id}/activities")
    
    http = Net::HTTP.new(url.host, url.port)
    http.use_ssl = true
    req = Net::HTTP::Post.new(url)
    req["Accept"] = "application/json"
    req["Content-Type"] = "application/json"
    req["Authorization"] = "Bearer #{@api_key}"
    
    req.body = construct_body
    
    req.body = req.body.to_json
    
    response = http.request(req)
    
    JSON.parse(response.body)
    
    활동이 Orbit API로 전송되면 작업공간에서 바로 확인할 수 있습니다!

    루비 사용


    이 자습서의 코드는 다양한 작업을 추상화하는 기능이 포함된 Ruby gem에서 나온 것입니다.CLI(Command Line Interface)도 포함되어 있어 더욱 간편하게 실행할 수 있습니다.
    gem 코드는 GitHub에서 찾을 수 있습니다.프로젝트에gem을 설치하려면 net/http에 추가합니다.
    gem 'dev_orbit'
    
    그런 다음 명령줄에서 실행Gemfile합니다.gem이 프로젝트에 포함되면 관련 개발자와 트랙 API 자격 증명을 전달하여 클라이언트를 실례화할 수 있습니다.
    client = DevOrbit::Client.new(
      orbit_api_key: '...',
      orbit_workspace: '...',
      dev_api_key: '...',
      dev_username: '...'
    )
    
    지난 하루 동안 개발자 블로그 게시물에 올라온 모든 새로운 댓글을 얻으려면 클라이언트에서 bundle install 실례 방법을 호출할 수 있습니다.
    client.comments
    
    이 메서드는 DEV의 지난 하루 동안의 모든 설명을 수집하여 Orbit 작업공간에서 활동 형식을 설정하고 Orbit API#comments에 이를 추가하도록 요청합니다.

    GitHub 작업을 통한 자동화


    이gem을 매일 한 번 실행하고 최신 개발 평론을 받아서 Orbit 작업 영역에 추가하려면 어떻게 해야 합니까?매일 수동으로 실행할 수도 있고 GitHub Actions자동화할 수도 있습니다!
    GitHub Actions는 GitHub이 공용 저장소에 무료로 제공하는 모든 소프트웨어 워크플로우를 실행할 수 있는 환경입니다.클라우드나 여러 용례 중 하나에 배치할 수 있는 코드를 실행하는 테스트 세트를 사용할 수 있습니다.우리의 예시에서, 우리는 GitHub 조작을 사용하여 cron 계획에 따라 매일 이gem를 운행할 것이다.
    GitHub 저장소에 POST라는 폴더를 만들고, 첫 번째 폴더에 .github라는 다른 폴더를 만듭니다.workflows 폴더에 workflows라는 이름의 YAML 파일을 만듭니다.파일에 다음 YAML 텍스트를 추가합니다.
    name: Check For New DEV Blog Post Comments and Add to Orbit Workspace
    on:
      schedule:
        - cron: "0 0 */1 * *"
      workflow_dispatch:
        branches:
          - main
    jobs:
      comments-workflow:
        runs-on: ubuntu-latest
        steps:
        - uses: actions/checkout@v2
          with:
            fetch-depth: 0
            submodules: recursive
        - name: Set up Ruby 2.7.2
          uses: ruby/setup-ruby@v1
          with:
            ruby-version: 2.7.2
        - name: Ruby gem cache
          uses: actions/cache@v1
          with:
            path: vendor/bundle
            key: ${{ runner.os }}-gems-${{ hashFiles('**/Gemfile.lock') }}
            restore-keys: |
              ${{ runner.os }}-gems-
        - name: Bundle Install
          run: |
            gem update --system 3.1.4 -N
            gem install --no-document bundler
            bundle config path vendor/bundle
            bundle install --jobs 4 --retry 3
        - name: Check for New Comments
          run: |
            bundle exec dev_orbit --check-comments
          env:
            DEV_API_KEY: ${{ secrets.DEV_API_KEY }}
            DEV_USERNAME: ${{ secrets.DEV_USERNAME }}
            ORBIT_API_KEY: ${{ secrets.ORBIT_API_KEY }}
            ORBIT_WORKSPACE_ID: ${{ secrets.ORBIT_WORKSPACE_ID }}
    

    This YAML workflow assumes that you have uploaded your Gemfile with the dev_orbit gem listed inside of it.


    위의 워크플로우는 GitHub Actions 인스턴스에 Ruby developer 환경을 만듭니다.그런 다음 gm 파일에 나열된 의존 항목을 설치하고 마지막으로 gm의 CLI를 사용하여 새 블로그 게시물 설명을 확인하고 Orbit 작업공간에 추가합니다.
    이러한 자동화를 위해서는 DEV 및 Orbit 자격 증명을 GitHub 저장소의 기밀 설정에 추가하는 것이 중요합니다.저장소에서 설정으로 이동하고 측면 탐색 모음에서 [기밀]을 클릭하여 기밀을 찾을 수 있습니다.

    일단 당신의 비밀이 추가되면, 이 작업 절차는 자동으로 매일 한 번 실행됩니다!Orbit 작업 구역에 들어가서 회원 활동에서 최신 개발자 블로그 평론을 찾으면 됩니다. 다른 일을 할 필요가 없습니다.
    Orbit API 사용에 대해 더 알고 싶으십니까?다음 추가 리소스를 보려면 다음과 같이 하십시오.
  • How To Add Docs Feedback to Your Orbit Workspace with Ruby on Rails
  • Community-built Open Source Resources
  • Orbit API Reference
  • 좋은 웹페이지 즐겨찾기