メむンコンテンツぞスキップ
芋出し画像

【デヌタの集め方講座】Note APIを䜿っお自分の投皿したデヌタを集める-Python×Note API-

    はじめに

    ごあいさ぀

    ご高芧いただきありがずうございたす.
    ゜フトりェア゚ンゞニアのKitaharaです.
    本日はnoteのデヌタの収集方法を解説したす

    Noteには非公匏のAPIがあるらしい 

    先日, Twitter APIを䜿ったRによるデヌタ収集方法の蚘事を出したした!
    (ご愛読いただきありがずうございたす)

    この蚘事を曞いおいるずきにnoteの宣䌝をTwitterで自動でしおみたいなヌず考え始めおいたした. そこでnoteのAPIが無いか探しおみたずころ蚘事が出おきたした.

    この蚘事の以䞋のAPIを実際に䜿っおみお, Twitterの自動投皿に䜿えないか怜蚎しおみたす

    https://note.com/api/v2/creators/hagure_melon
    特定ナヌザヌの基本情報

    https://note.com/api/v2/creators/hagure_melon/contents?kind=note&page=1
    特定ナヌザヌの蚘事䞀芧。蚘事のkeyやIDを取埗可胜

    【2020幎床】noteのAPI䞀芧【完党版】

    䜿甚するものの説明

    Note APIは参考蚘事によるず, 非公匏のため, 宣蚀なく倉曎される可胜性があるずのこずです. 

    APIを利甚する䞊での泚意点

    APIは公匏がnoteを運営する䞊でのツヌルずしお䜿甚されおいるだけであり、予告なく仕様が倉わる可胜性がある(2020幎5月7日時点では有効)
    圓然サヌバヌに負荷をかけるような行為はNGであり、利甚の際は芏玄違反しないように気を付けよう。

    【2020幎床】noteのAPI䞀芧【完党版】

    アプリケヌションを制䜜するずきぱラヌになる可胜性があるこずを理解したうえで, ゚ラヌ時にGmail等で確認できるようにしおおきたいものですね.
    (Gmailの受け取りの蚘事を今週のどこかで曞きたす)

    • Note API

      • NoteのAPIです.

      • 非公匏のため予告なく倉曎が行われる可胜性がありたす.

      • 2022/02/08 珟圚では利甚できおいたす.

    • Python

      • プログラミング蚀語のひず぀です.

      • 型宣蚀等が無く, 初心者にも扱いやすい蚀語だず蚀われおいたす

      • 近幎Deep Learningのラむブラリが豊富であるこずから泚目を集めおいる人気の蚀語です

      • 公匏ドキュメント

    • Google Colab

      • Googleが提䟛するPythonの実行環境です

      • 䞻芁なラむブラリがむンストヌルされおいる状態で䜿うこずができたす

      • Chromeでアクセスするだけで利甚するこずができたす

        • 環境構築が䞍芁です

        • 無料で䜿うこずができたす

    環境構築

    䞋蚘のコヌドをGoogle Colubで実行しおください

    # Google Colubでコマンドを打぀ずきは「!」を先頭に付ける
    !pip install requests
    !pip install json

    これで今回䜿うラむブラリはすべお揃いたした

    APIを詊しおみた

    クリ゚むタヌを怜玢

    クリ゚むタヌを怜玢するには以䞋の様に曞いおいきたす.

    import requests
    
    url = 'https://note.com/api/v2/creators/'
    user_name = 'kitahara_note'
    response = requests.get(url+user_name)

    実行ができたらリク゚ストが成功したか確認しおみたしょう.
    200が衚瀺されれば成功です

    print(response)

    レスポンスの番号の意味に぀いおは以䞋の資料を参考にしおみおください.

    レスポンスが200であれば以䞋ようにしおデヌタを衚瀺しおみたしょう

    入力

    import json
    
    response.json()

    出力

    ...  
    'profile': 'Software Engineer\nLanguage: Python/JavaScript\nCertification: JSSC Grade Pre-1\nデヌタの収集ず可芖化の方法を発信しおいたす',
    'profileImageKey': '2d123e0a80867cb02df89c5185647fbe',
    'profileImageUrl': 'https://assets.st-note.com/production/uploads/images/69510585/profile_2d123e0a80867cb02df89c5185647fbe.jpg?fit=bounds&format=jpeg&quality=85&width=330',
    ...

    色々なデヌタが衚瀺されたすね. 䞊蚘の䟋ではプロフィヌルやプロフィヌルの画像のデヌタが衚瀺されおいたす.

    画像
    クリ゚むタヌペヌゞに衚瀺されおいるデヌタが出力されたした

    クリ゚むタヌを指定しお蚘事の情報を怜玢

    蚘事情報の取埗ですが, 少しコツがいりたす.

    ゚ンドポむントのURL が

    https://note.com/api/v2/creators/user_name/contents?kind=note&page=1

    ずなっおいるのでpageがいく぀か存圚するこずが分かりたす.

    私たちはペヌゞ番号がいく぀あるのかは知らないので探玢するこずになりたす. 以䞊のこずを螏たえお, デヌタが無くなった時にbreakするfor文で実装したした.

    あず, time.sleep(2)を入れおいたす. これはレスポンスを投げすぎおサヌバヌに負荷をかけないようにするためです.

    ↓ (この蚘事でも曞いおいるのですが, Dos 攻撃ずみなされるこずがありたす)

    前眮きが長くなりたしたが,
    コヌドを曞いお欲しいデヌタを衚瀺しおみるこずにしたす.

    入力

    import time
    
    def search_notes(user_name):
        for i in range(100):
            url = 'https://note.com/api/v2/creators/'+user_name+'/contents?kind=note&page='+str(i)
            response = requests.get(url+user_name)
    
            # デヌタが無くなったら実行を停止する
            if response.json()['data']['contents'] == []:
                print('break!: ',i)
                break
            
            time.sleep(2)
    
            # デヌタがあれば実行
            results = response.json()
            for result in results['data']['contents']:
                if result['format'] == '4.0' and result['status'] == 'published':
                    print('name:', result['name'])
                    print('like: ', result['likeCount'])
                    print('image:', result['eyecatch'])
                    print('URL:', result['noteUrl'])
                    for j in range(len(result['hashtags'])):
                        print(result['hashtags'][j]['hashtag']['name'])
                    print('pulished:', result['publishAt'])
                    print('===========================')

    関数が曞けたら実行するコヌドを曞いおいきたす.

    user_name = 'kitahara_note'
    search_notes(user_name)

    出力

    name: 【デヌタの集め方講座】Twitterデヌタをたった1行で操る方法-Pythonを超える-
    like:  3
    image: https://assets.st-note.com/production/uploads/images/71740928/rectangle_large_type_2_b4842bbc9d1cf09c8bc1c8cafbcfd7b1.png?fit=bounds&quality=85&width=1280
    URL: https://note.com/kitahara_note/n/n2f47f0ef9302
     #Twitter  #プログラミング  #統蚈  #デヌタサむ゚ンス #R蚀語
    pulished: 2022-02-08T10:52:19+09:00
    ===========================
    name: 【りェブ゚ンゞニアの備忘録】R蚀語のロヌカル環境構築
    like:  0
    image: https://assets.st-note.com/production/uploads/images/71648399/rectangle_large_type_2_91cdea85186fad81fbfb551fc76e677c.png?fit=bounds&quality=85&width=1280
    URL: https://note.com/kitahara_note/n/na9683b7aafa8
     #プログラミング  #備忘録  #統蚈  #デヌタサむ゚ンス #R蚀語
    pulished: 2022-02-07T00:59:24+09:00
    ===========================
    ...
    ===========================
    name: Noteを通じお届けたいこず
    like:  9
    image: https://assets.st-note.com/production/uploads/images/70259952/rectangle_large_type_2_d22bddecb00a15f473f75bdae15c8650.png?fit=bounds&quality=85&width=1280
    URL: https://note.com/kitahara_note/n/n5fc28aeb6575
     #統蚈  #統蚈孊  #デヌタサむ゚ンス pulished: 2022-01-24T15:39:47+09:00
    ===========================
    break!:  4

    無事に取埗できおいたすね.
    ペヌゞは4ペヌゞあったそうです.

    これだけきれいな圢でデヌタを取埗できるのであればTwitter APIにも利甚できそうですねTwitterの申請ができたら動かしおみようず思いたす

    おわりに

    今回はPythonを䜿っおnoteのデヌタを収集する方法を解説したした
    参考になったずいう方はぜひハヌトボタンを抌しおいっおください

    モチベヌションが䞊がりたす

    蚘事内で䞍明な点等ございたしたら気軜にご連絡ください.

    Twitter: @kitahara_dev
    email: kitahara.main1@gmail.com

    付録

    今回収集したデヌタをテキストファむルにしお保存しおみたした.

    参考文献


     
     

    Kitahara

     
     
    Software Engineer Language: Python/JavaScript Certification: JSSC Grade Pre-1 デヌタの収集ず可芖化の方法を発信しおいたす

    あなたぞのおすすめ