크롬 확장 프로그램 개발하기

in whan •  6 years ago  (edited)


Design by @imrahelk


안녕하세요. 안피곤입니다.

크롬 웹 스토어에는 해피베리보이(@happyberrysboy)님이 만드신 Steem Tools 앱이 있습니다. 제가 유용하게 잘 사용하고 있습니다. ㅋ

제가 여기에 기능을 추가하고 싶다는 의사를 전달하였습니다. 감격스럽게도 해피보이님께서 저를 일명 WS_TOOLS 앱의 커미터(Committer)로 채택해주셨습니다. 그래서 해피보이님과 협업으로 크롬 확장프로그램을 개발하고 있습니다. ㅋ

저는 크롬 확장 프로그램은 한번도 만들어 본적이 없습니다. 그래서 해피님의 도움과 구글 문서를 참고 하여 개발하였습니다.

참고: https://developer.chrome.com/extensions/content_scripts


*

manifest.json 파일에 content_scripts를 추가합니다. content_scripts를 사용하면 부모 페이지의 DOM에 접근할 수 있습니다.

manifest.json

...
  "content_scripts": [
    {
      "matches": ["https://steemit.com/*"], 
      "run_at": "document_idle",
      "js": ["jquery3.3.1.min.js", "content_script.js"],
      "css": ["content_style.css"]
    }
  ],
...



그리고 content_script.js 파일을 작성합니다. 이 파일에 카테고리 링크를 보여주는 HTML과 API 서버에서 글을 가져오는 로직을 구현합니다.

content_script.js

(async () => {
  const GetPostsQuery = `query 
    GetPosts($tags: [String!]!) {
      getPosts(
        tags: $tags
      ) {
        author
        permlink
        title
        author_reputation
        summary
        tags
        image
        created
        total_payout_value
        curator_payout_value
        pending_payout_value
        vote_count
        comment_count
      }
  }`;

  function getPosts(tags=["kr"], start=0, limit=10) {
    fetch(GRAPHQL_URL, {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
        'Accept': 'application/json',
      },
      body: JSON.stringify({
        query: GetPostsQuery,
        variables: { tags, start, limit },
      })
    })
      .then(r => r.json())
      .then(({ data }) => {
        const posts = data.getPosts;
        const postsDom = posts.map(post => {
          return `<li>
            <div class='articles__summary'>
              (html comment removed:  ... 코드가 너무 길어서 생략함 ... )
            </div>
          </li>`
        });
        $("#posts_list > ul").html(postsDom);
      }); 
  }

  const cetegoryDom = $(`
  <div>
    <hr>
    <center>
    <a href="#" tags="">전체</a> |
    <a href="#" tags="kr-life, life">일상</a> |
    <a href="#" tags="kr-book, book, booksteem">도서</a> |
    <a href="#" tags="kr-game, game">게임</a> |
    <a href="#" tags="kr-dev, dev">코딩</a> |
    <a href="#" tags="kr-art, art">예술</a> |
    </center>
    <hr>
  </div>
  `);
  cetegoryDom.find('a').click(evt => {
    const tags = evt.target.getAttribute('tags').split(',')
    getPosts(tags);
  })
  $(".App__content").before(cetegoryDom);
})();


API 서버를 만드는 과정은 "Google App Engine + GraphQL으로 스팀잇 API 서버 만들기" 에서 소개하였습니다. 이 API 서버에서 각 분류에 해당하는 글을 가져옵니다. 데이터 가져오는 속도가 제 예상보다 빨랐습니다.


*

아래는 여기까지 작업한 화면입니다.

각 카테고리에 해당하는 링크를 클릭하면 관련 글을 몽땅 가져옵니다. 글의 분류는 글에 포함되어 있는 태그를 기준으로 분류하였습니다. 예를 들어 글의 태그에 #book, #kr-book, #booksteem 중 하나라도 포함되어 있으면 도서로 분류됩니다.



그리고 이걸 작업하고 나서 해피님께 최우수상을 받았습니다. 이 맛에 코딩하는 것 같습니다. ㅋ
참고로 상장은 원사마님이 디자인하였습니다.


모두 해피 코딩하세요~!





Sponsored ( Powered by dclick )

dclick-imagead


Originally posted on 안피곤님의 블로그. Steem blog powered by ENGRAVE.

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!
Sort Order:  

happyberrysboy님이 anpigon님을 멘션하셨습니당. 아래 링크를 누르시면 연결되용~ ^^
happyberrysboy님의 [kr-dev] Steem Tools 전면 개편!!(크롬 확장프로그램)

녕하세요, 올드스톤님.
색인 기능은 anpigon이 한번 기능 추가를 해보겠다고 합니다. 내나 저와 같이 WHAN Dev 팀에서 steemit tools을 개발하는 분입니다. 믿을만한 분이니 한번 기다려 주시기 바랍니다..
...

@anpigon님 넘치는 사랑 감사합니다~

곰돌이님의 넘치는 사랑 감사합니다.

좋습니다^^

캄사합니다~!

최우수상 축하드려요. 앞으로 활동 응원해요.

도리안님 감사합니다. 앞으로 더 열심히 할께요. ㅋㅋ
협업으로 개발하니 더 잼납니다.

오호!! 오늘은 안피곤~~~ ㅎㅎ
잘 만드셨네요^^

독거노인님 오늘도 안피곤입니다.ㅎㅎ
감사합니다.

생활코딩에서 구글확장 프로그램 만들기 강좌 보고 따라 해봤는데 예전에 은근 재미가 있었던 기억이 나네요.
딱히 만들게 없어서 연습삼아 만들어보고 말았는데 재밌는 것을 만드셨군요.

생활코딩에 강좌가 있군요. 저도 봐야겠습니다. ㅋ
그런데 만들고 보니 정말 재미있습니다.

대박! ㅎㅎ

대박 감사합니다.ㅎㅎ
제이콥님도 해피 코딩하세요.ㅋ

오오 좋네요!

Posted using Partiko Android

코딩은 언제나 재미있습니다. 글로리님 넥스콜리니는 여전히 재미있나요? 전 좀 하다가 말았네요. ㅋ

매우 장기적인 방치형 게임인듯... 가끔 들어가서 업글 눌러주시면 됩니다.

Posted using Partiko Android

정말 방치형 개임이군요. 이오스 나이츠처럼 모바일로도 나왔으면 좋겠어요. ㅋㅋ

Hi @anpigon!

Your post was upvoted by @steem-ua, new Steem dApp, using UserAuthority for algorithmic post curation!
Your UA account score is currently 2.359 which ranks you at #19342 across all Steem accounts.
Your rank has improved 599 places in the last three days (old rank 19941).

In our last Algorithmic Curation Round, consisting of 194 contributions, your post is ranked at #137.

Evaluation of your UA score:
  • Only a few people are following you, try to convince more people with good work.
  • The readers like your work!
  • You have already shown user engagement, try to improve it further.

Feel free to join our @steem-ua Discord server

이렇게 또 한 분의 능력자가 나타났네요^^

이런게 바로 탈 중앙화의 의미가 아닌가 싶습니다

이런게 바로 탈중화가 가지고 있는 재미 중 하나입니다. ㅋ

오오.....굿굿!!!

뉴비존님 단톡방에 얼른 돌아오세요~ㅋㅋ

가고 싶어도 ㅠㅠㅠ 못가여 ㅠㅠ흨흨흨....5월 14일 11시 넘어서 봐요 ㅋㅋㅋㅋㅋ

오호! 멋집니다!!!!
멋진 기능이 추가되었네요 ㅎ

앞으로 더 멋진 기능을 추가하려고 해피베리보이님과 계획 중입니다. 시간이 허락한다면 빠르게 진행하고 싶네요. ㅋ

와~~~ 대단하십니다. ^^

big-tree-3443533_960_720.jpg

아낌없이 주는 나무 보팅하고갑니다^^

오늘의 링크 : https://steemit.com/kr/@best-live/7sioox-tree-bank
내용 : 아낌없이 주는 나무 상생 프로젝트 두번째인 tree-bank 제도를 알립니다:)

감사합니다.

오 써봐야겠네요. 안그래도 얼마전에 Keychain수정하면서 처음으로 chrome extenstion 코드가 대충 이렇게 되는구나 살펴봤네요. 근데 필요한 부분만 찾아서 수정한거라 여전히 잘 모름ㅎㅎ

  ·  6 years ago (edited)

chrome extenstion 는 저도 처음 개발해보았습니다. 그런데 제대로된 앱을 구현하려니 학습이 많이 필요합니다. ㅠ 그리고 원하는 기능을 구현하려니 한계점도 있고.. 아마도 제가 하려는 기능은 별도 페이지로 개발해야 할것 같습니다.