nico_util 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
 - data/.gitignore +9 -0
 - data/.rspec +2 -0
 - data/.travis.yml +4 -0
 - data/Gemfile +4 -0
 - data/LICENSE.txt +21 -0
 - data/README.md +68 -0
 - data/Rakefile +6 -0
 - data/bin/console +14 -0
 - data/bin/setup +7 -0
 - data/lib/live.rb +73 -0
 - data/lib/nico_util/version.rb +3 -0
 - data/lib/nico_util.rb +73 -0
 - data/lib/video.rb +68 -0
 - data/nico_util.gemspec +25 -0
 - metadata +100 -0
 
    
        checksums.yaml
    ADDED
    
    | 
         @@ -0,0 +1,7 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            ---
         
     | 
| 
      
 2 
     | 
    
         
            +
            SHA1:
         
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 084c27e82607a1983c6b88fc866c4f92acfc394b
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 8381db0d5857c45fdc99557bca9c33b4e839f54f
         
     | 
| 
      
 5 
     | 
    
         
            +
            SHA512:
         
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: 13db94083c011a4f6eb253b2883474f7dcdc1db5b37e071b21d814bbac7b300b32123c29a414655d22a91644560200831e4288b36aba9c05f3237512bc451cce
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 78a95c80a0c76f39c7c128c15c4a5cfb3af94618468a1473d00b5688f4d2a3ab92bd9d0ebda33b9d1a16d67a6e010e6f93197b69f9044683c2f5f6cbe9a2a27d
         
     | 
    
        data/.gitignore
    ADDED
    
    
    
        data/.rspec
    ADDED
    
    
    
        data/.travis.yml
    ADDED
    
    
    
        data/Gemfile
    ADDED
    
    
    
        data/LICENSE.txt
    ADDED
    
    | 
         @@ -0,0 +1,21 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            The MIT License (MIT)
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            Copyright (c) 2015 Tatsuya Tanaka
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            Permission is hereby granted, free of charge, to any person obtaining a copy
         
     | 
| 
      
 6 
     | 
    
         
            +
            of this software and associated documentation files (the "Software"), to deal
         
     | 
| 
      
 7 
     | 
    
         
            +
            in the Software without restriction, including without limitation the rights
         
     | 
| 
      
 8 
     | 
    
         
            +
            to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
         
     | 
| 
      
 9 
     | 
    
         
            +
            copies of the Software, and to permit persons to whom the Software is
         
     | 
| 
      
 10 
     | 
    
         
            +
            furnished to do so, subject to the following conditions:
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
            The above copyright notice and this permission notice shall be included in
         
     | 
| 
      
 13 
     | 
    
         
            +
            all copies or substantial portions of the Software.
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
            THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
         
     | 
| 
      
 16 
     | 
    
         
            +
            IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
         
     | 
| 
      
 17 
     | 
    
         
            +
            FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
         
     | 
| 
      
 18 
     | 
    
         
            +
            AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
         
     | 
| 
      
 19 
     | 
    
         
            +
            LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
         
     | 
| 
      
 20 
     | 
    
         
            +
            OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
         
     | 
| 
      
 21 
     | 
    
         
            +
            THE SOFTWARE.
         
     | 
    
        data/README.md
    ADDED
    
    | 
         @@ -0,0 +1,68 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # NicoUtil
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            Utility API for niconico (<http://www.nicovideo.jp>)
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            ## Features
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
            * Sign in to niconico
         
     | 
| 
      
 8 
     | 
    
         
            +
            * Get comments of video
         
     | 
| 
      
 9 
     | 
    
         
            +
            * Get comments of live
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
            ## Install
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
            Add the following line to Gemfile:
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
            ```
         
     | 
| 
      
 16 
     | 
    
         
            +
            gem 'nico_util'
         
     | 
| 
      
 17 
     | 
    
         
            +
            ```
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
            and run `bundle install` from your shell.
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
            Or do the following:
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
            ```
         
     | 
| 
      
 24 
     | 
    
         
            +
            $ gem install nico_util
         
     | 
| 
      
 25 
     | 
    
         
            +
            ```
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
            ## Usage
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 30 
     | 
    
         
            +
            require 'nico_util'
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
            # write your account of niconico
         
     | 
| 
      
 33 
     | 
    
         
            +
            email = 'niconico@example.com'
         
     | 
| 
      
 34 
     | 
    
         
            +
            pass = 'password'
         
     | 
| 
      
 35 
     | 
    
         
            +
             
     | 
| 
      
 36 
     | 
    
         
            +
            # login
         
     | 
| 
      
 37 
     | 
    
         
            +
            nico = NicoUtil::login email, pass
         
     | 
| 
      
 38 
     | 
    
         
            +
             
     | 
| 
      
 39 
     | 
    
         
            +
            # get and show comments of a video
         
     | 
| 
      
 40 
     | 
    
         
            +
            comments = nico.video('sm1097445').comments
         
     | 
| 
      
 41 
     | 
    
         
            +
            comments.each do |comment|
         
     | 
| 
      
 42 
     | 
    
         
            +
              p comment
         
     | 
| 
      
 43 
     | 
    
         
            +
            end
         
     | 
| 
      
 44 
     | 
    
         
            +
             
     | 
| 
      
 45 
     | 
    
         
            +
            # connect to a live and show data
         
     | 
| 
      
 46 
     | 
    
         
            +
            nico.live('lv242616226').connect do |status, data|
         
     | 
| 
      
 47 
     | 
    
         
            +
              case status
         
     | 
| 
      
 48 
     | 
    
         
            +
              when :comment
         
     | 
| 
      
 49 
     | 
    
         
            +
                puts data
         
     | 
| 
      
 50 
     | 
    
         
            +
              when :command
         
     | 
| 
      
 51 
     | 
    
         
            +
                puts data
         
     | 
| 
      
 52 
     | 
    
         
            +
              when :disconnect
         
     | 
| 
      
 53 
     | 
    
         
            +
                puts 'disconnect'
         
     | 
| 
      
 54 
     | 
    
         
            +
              end
         
     | 
| 
      
 55 
     | 
    
         
            +
            end
         
     | 
| 
      
 56 
     | 
    
         
            +
            ```
         
     | 
| 
      
 57 
     | 
    
         
            +
             
     | 
| 
      
 58 
     | 
    
         
            +
            ## Contributing
         
     | 
| 
      
 59 
     | 
    
         
            +
             
     | 
| 
      
 60 
     | 
    
         
            +
            1. Fork it!
         
     | 
| 
      
 61 
     | 
    
         
            +
            2. Create your feature branch: `git checkout -b my-new-feature`
         
     | 
| 
      
 62 
     | 
    
         
            +
            3. Commit your changes: `git commit -am 'Add some feature'`
         
     | 
| 
      
 63 
     | 
    
         
            +
            4. Push to the branch: `git push origin my-new-feature`
         
     | 
| 
      
 64 
     | 
    
         
            +
            5. Submit a pull request :D
         
     | 
| 
      
 65 
     | 
    
         
            +
             
     | 
| 
      
 66 
     | 
    
         
            +
            ## License
         
     | 
| 
      
 67 
     | 
    
         
            +
             
     | 
| 
      
 68 
     | 
    
         
            +
            NicoUtil is released under the MIT license. See LICENSE for details.
         
     | 
    
        data/Rakefile
    ADDED
    
    
    
        data/bin/console
    ADDED
    
    | 
         @@ -0,0 +1,14 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            #!/usr/bin/env ruby
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            require "bundler/setup"
         
     | 
| 
      
 4 
     | 
    
         
            +
            require "nico_util"
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
            # You can add fixtures and/or initialization code here to make experimenting
         
     | 
| 
      
 7 
     | 
    
         
            +
            # with your gem easier. You can also use a different console, if you like.
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
            # (If you use this, don't forget to add pry to your Gemfile!)
         
     | 
| 
      
 10 
     | 
    
         
            +
            # require "pry"
         
     | 
| 
      
 11 
     | 
    
         
            +
            # Pry.start
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
            require "irb"
         
     | 
| 
      
 14 
     | 
    
         
            +
            IRB.start
         
     | 
    
        data/bin/setup
    ADDED
    
    
    
        data/lib/live.rb
    ADDED
    
    | 
         @@ -0,0 +1,73 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            class NicoUtil::Niconico
         
     | 
| 
      
 2 
     | 
    
         
            +
              def live live_id
         
     | 
| 
      
 3 
     | 
    
         
            +
                Live.new self, live_id
         
     | 
| 
      
 4 
     | 
    
         
            +
              end
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
              class Live
         
     | 
| 
      
 7 
     | 
    
         
            +
                def initialize owner, live_id
         
     | 
| 
      
 8 
     | 
    
         
            +
                  @owner = owner
         
     | 
| 
      
 9 
     | 
    
         
            +
                  @id = live_id
         
     | 
| 
      
 10 
     | 
    
         
            +
                end
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
                def playerstatus
         
     | 
| 
      
 13 
     | 
    
         
            +
                  return @playerstatus if @playerstatus
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
                  host = 'live.nicovideo.jp'
         
     | 
| 
      
 16 
     | 
    
         
            +
                  path = "/api/getplayerstatus?v=#{@id}"
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
                  response = Net::HTTP.new(host).start do |http|
         
     | 
| 
      
 19 
     | 
    
         
            +
                    request = Net::HTTP::Get.new(path)
         
     | 
| 
      
 20 
     | 
    
         
            +
                    request['cookie'] = @owner.cookie
         
     | 
| 
      
 21 
     | 
    
         
            +
                    http.request(request)
         
     | 
| 
      
 22 
     | 
    
         
            +
                  end
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
                  playerstatus = {}
         
     | 
| 
      
 25 
     | 
    
         
            +
                  body = response.body.force_encoding('utf-8')
         
     | 
| 
      
 26 
     | 
    
         
            +
                  doc = REXML::Document.new(body).elements['getplayerstatus']
         
     | 
| 
      
 27 
     | 
    
         
            +
                  # stream = doc.elements['stream']
         
     | 
| 
      
 28 
     | 
    
         
            +
                  # title = stream.elements['title'].text
         
     | 
| 
      
 29 
     | 
    
         
            +
                  # desc = stream.elements['description'].text
         
     | 
| 
      
 30 
     | 
    
         
            +
                  ms = doc.elements['ms']
         
     | 
| 
      
 31 
     | 
    
         
            +
                  playerstatus[:addr] = ms.elements['addr'].text
         
     | 
| 
      
 32 
     | 
    
         
            +
                  playerstatus[:port] = ms.elements['port'].text
         
     | 
| 
      
 33 
     | 
    
         
            +
                  playerstatus[:thread_id] = ms.elements['thread'].text
         
     | 
| 
      
 34 
     | 
    
         
            +
                  @playerstatus = playerstatus
         
     | 
| 
      
 35 
     | 
    
         
            +
                end
         
     | 
| 
      
 36 
     | 
    
         
            +
             
     | 
| 
      
 37 
     | 
    
         
            +
                def connect
         
     | 
| 
      
 38 
     | 
    
         
            +
                  info = playerstatus()
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
                  TCPSocket.open(info[:addr], info[:port].to_i) do |sock|
         
     | 
| 
      
 41 
     | 
    
         
            +
                    ticket = "<thread thread=\"#{info[:thread_id]}\" version=\"20061206\" res_from=\"-1000\"/>\0"
         
     | 
| 
      
 42 
     | 
    
         
            +
                    sock.write(ticket)
         
     | 
| 
      
 43 
     | 
    
         
            +
                    # 最初の1回にいらないデータが来る
         
     | 
| 
      
 44 
     | 
    
         
            +
                    p sock.gets("\0")
         
     | 
| 
      
 45 
     | 
    
         
            +
                    while true
         
     | 
| 
      
 46 
     | 
    
         
            +
                      stream = sock.gets("\0")
         
     | 
| 
      
 47 
     | 
    
         
            +
                      if stream.index("\0") == stream.length - 1
         
     | 
| 
      
 48 
     | 
    
         
            +
                        stream = stream[0..-2]
         
     | 
| 
      
 49 
     | 
    
         
            +
                      end
         
     | 
| 
      
 50 
     | 
    
         
            +
                      if stream
         
     | 
| 
      
 51 
     | 
    
         
            +
                        # next if stream =~ /ifseetno/    # 一般会員を追い出した
         
     | 
| 
      
 52 
     | 
    
         
            +
                        # next if stream =~ /panel clear/ # 運営が表示したパネルの削除
         
     | 
| 
      
 53 
     | 
    
         
            +
                        # next if stream =~ /\/play/      # クルーズなどで動画を再生する
         
     | 
| 
      
 54 
     | 
    
         
            +
                        if stream =~ /chat/
         
     | 
| 
      
 55 
     | 
    
         
            +
                          stream = REXML::Document.new(stream).elements['chat']
         
     | 
| 
      
 56 
     | 
    
         
            +
                          if stream
         
     | 
| 
      
 57 
     | 
    
         
            +
                            if stream.text[0] == '/'
         
     | 
| 
      
 58 
     | 
    
         
            +
                              yield :command, stream.text
         
     | 
| 
      
 59 
     | 
    
         
            +
                            else
         
     | 
| 
      
 60 
     | 
    
         
            +
                              yield :comment, stream.text
         
     | 
| 
      
 61 
     | 
    
         
            +
                            end
         
     | 
| 
      
 62 
     | 
    
         
            +
                          end
         
     | 
| 
      
 63 
     | 
    
         
            +
                        elsif stream =~ /\/disconnect/
         
     | 
| 
      
 64 
     | 
    
         
            +
                          yield :disconnect, nil
         
     | 
| 
      
 65 
     | 
    
         
            +
                          break
         
     | 
| 
      
 66 
     | 
    
         
            +
                        end
         
     | 
| 
      
 67 
     | 
    
         
            +
                      end
         
     | 
| 
      
 68 
     | 
    
         
            +
                    end
         
     | 
| 
      
 69 
     | 
    
         
            +
                  end
         
     | 
| 
      
 70 
     | 
    
         
            +
                end
         
     | 
| 
      
 71 
     | 
    
         
            +
             
     | 
| 
      
 72 
     | 
    
         
            +
              end
         
     | 
| 
      
 73 
     | 
    
         
            +
            end
         
     | 
    
        data/lib/nico_util.rb
    ADDED
    
    | 
         @@ -0,0 +1,73 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'uri'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'net/http'
         
     | 
| 
      
 3 
     | 
    
         
            +
            require 'openssl'
         
     | 
| 
      
 4 
     | 
    
         
            +
            require 'rexml/document'
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
            # ニコ動コメント取得
         
     | 
| 
      
 7 
     | 
    
         
            +
            # https://blog.nanoway.net/web/nicovideo-comment-api
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
            # ニコ生コメント取得
         
     | 
| 
      
 10 
     | 
    
         
            +
            # http://pita.s374.xrea.com/cms/75/
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
            module NicoUtil
         
     | 
| 
      
 13 
     | 
    
         
            +
              def self.login email, pass
         
     | 
| 
      
 14 
     | 
    
         
            +
                Niconico.new email, pass
         
     | 
| 
      
 15 
     | 
    
         
            +
              end
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
              class Niconico
         
     | 
| 
      
 18 
     | 
    
         
            +
                class AuthenticationError < StandardError; end
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
                def initialize email, pass
         
     | 
| 
      
 21 
     | 
    
         
            +
                  @cookie = nil
         
     | 
| 
      
 22 
     | 
    
         
            +
                  @email = email
         
     | 
| 
      
 23 
     | 
    
         
            +
                  @pass = pass
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
                  login
         
     | 
| 
      
 26 
     | 
    
         
            +
                end
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
                def cookie
         
     | 
| 
      
 29 
     | 
    
         
            +
                  login if @cookie == nil
         
     | 
| 
      
 30 
     | 
    
         
            +
                  @cookie
         
     | 
| 
      
 31 
     | 
    
         
            +
                end
         
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
      
 33 
     | 
    
         
            +
                def login
         
     | 
| 
      
 34 
     | 
    
         
            +
                  host = 'secure.nicovideo.jp'
         
     | 
| 
      
 35 
     | 
    
         
            +
                  path = '/secure/login?site=niconico'
         
     | 
| 
      
 36 
     | 
    
         
            +
                  body = "mail=#{@email}&password=#{@pass}"
         
     | 
| 
      
 37 
     | 
    
         
            +
             
     | 
| 
      
 38 
     | 
    
         
            +
                  https = Net::HTTP.new host, 443
         
     | 
| 
      
 39 
     | 
    
         
            +
                  https.use_ssl = true
         
     | 
| 
      
 40 
     | 
    
         
            +
                  https.verify_mode = OpenSSL::SSL::VERIFY_NONE
         
     | 
| 
      
 41 
     | 
    
         
            +
                  response = https.start do |https|
         
     | 
| 
      
 42 
     | 
    
         
            +
                    https.post path, body
         
     | 
| 
      
 43 
     | 
    
         
            +
                  end
         
     | 
| 
      
 44 
     | 
    
         
            +
             
     | 
| 
      
 45 
     | 
    
         
            +
                  @cookie = nil
         
     | 
| 
      
 46 
     | 
    
         
            +
                  response['set-cookie'].split('; ').each do |st|
         
     | 
| 
      
 47 
     | 
    
         
            +
                    if idx=st.index('user_session_')
         
     | 
| 
      
 48 
     | 
    
         
            +
                      @cookie = "user_session=#{st[idx..-1]}"
         
     | 
| 
      
 49 
     | 
    
         
            +
                      break
         
     | 
| 
      
 50 
     | 
    
         
            +
                    end
         
     | 
| 
      
 51 
     | 
    
         
            +
                  end
         
     | 
| 
      
 52 
     | 
    
         
            +
             
     | 
| 
      
 53 
     | 
    
         
            +
                  unless @cookie
         
     | 
| 
      
 54 
     | 
    
         
            +
                    puts 'Invalid email or password'
         
     | 
| 
      
 55 
     | 
    
         
            +
                  end
         
     | 
| 
      
 56 
     | 
    
         
            +
                end
         
     | 
| 
      
 57 
     | 
    
         
            +
             
     | 
| 
      
 58 
     | 
    
         
            +
                def logged_in?
         
     | 
| 
      
 59 
     | 
    
         
            +
                  @cookie != nil
         
     | 
| 
      
 60 
     | 
    
         
            +
                end
         
     | 
| 
      
 61 
     | 
    
         
            +
             
     | 
| 
      
 62 
     | 
    
         
            +
                def check_logged_in!
         
     | 
| 
      
 63 
     | 
    
         
            +
                  unless logged_in?
         
     | 
| 
      
 64 
     | 
    
         
            +
                    raise AuthenticationError, "You are not authorized..."
         
     | 
| 
      
 65 
     | 
    
         
            +
                  end
         
     | 
| 
      
 66 
     | 
    
         
            +
                end
         
     | 
| 
      
 67 
     | 
    
         
            +
             
     | 
| 
      
 68 
     | 
    
         
            +
              end
         
     | 
| 
      
 69 
     | 
    
         
            +
            end
         
     | 
| 
      
 70 
     | 
    
         
            +
             
     | 
| 
      
 71 
     | 
    
         
            +
            require_relative 'video.rb'
         
     | 
| 
      
 72 
     | 
    
         
            +
            require_relative 'live.rb'
         
     | 
| 
      
 73 
     | 
    
         
            +
             
     | 
    
        data/lib/video.rb
    ADDED
    
    | 
         @@ -0,0 +1,68 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            class NicoUtil::Niconico
         
     | 
| 
      
 2 
     | 
    
         
            +
              def video video_id
         
     | 
| 
      
 3 
     | 
    
         
            +
                Video.new self, video_id
         
     | 
| 
      
 4 
     | 
    
         
            +
              end
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
              class Video
         
     | 
| 
      
 7 
     | 
    
         
            +
                def initialize owner, video_id
         
     | 
| 
      
 8 
     | 
    
         
            +
                  @owner = owner
         
     | 
| 
      
 9 
     | 
    
         
            +
                  @id = video_id
         
     | 
| 
      
 10 
     | 
    
         
            +
                end
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
                def flv_info
         
     | 
| 
      
 13 
     | 
    
         
            +
                  return @flv_info if @flv_info
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
                  @owner.check_logged_in!
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
                  host = 'flapi.nicovideo.jp'
         
     | 
| 
      
 18 
     | 
    
         
            +
                  path = "/api/getflv/#{@id}"
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
                  response = Net::HTTP.new(host).start do |http|
         
     | 
| 
      
 21 
     | 
    
         
            +
                    request = Net::HTTP::Get.new(path)
         
     | 
| 
      
 22 
     | 
    
         
            +
                    request['cookie'] = @owner.cookie
         
     | 
| 
      
 23 
     | 
    
         
            +
                    http.request(request)
         
     | 
| 
      
 24 
     | 
    
         
            +
                  end
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
                  flv_info = {}
         
     | 
| 
      
 27 
     | 
    
         
            +
                  response.body.split('&').each do |st|
         
     | 
| 
      
 28 
     | 
    
         
            +
                    stt = st.split('=')
         
     | 
| 
      
 29 
     | 
    
         
            +
                    flv_info[stt[0].to_sym] = stt[1]
         
     | 
| 
      
 30 
     | 
    
         
            +
                  end
         
     | 
| 
      
 31 
     | 
    
         
            +
                  flv_info[:ms] = URI.unescape flv_info[:ms]
         
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
      
 33 
     | 
    
         
            +
                  @flv_info = flv_info
         
     | 
| 
      
 34 
     | 
    
         
            +
                end
         
     | 
| 
      
 35 
     | 
    
         
            +
             
     | 
| 
      
 36 
     | 
    
         
            +
                def comments limit_max = 1000
         
     | 
| 
      
 37 
     | 
    
         
            +
                  return @comments if @comments && limit_max == 1000
         
     | 
| 
      
 38 
     | 
    
         
            +
             
     | 
| 
      
 39 
     | 
    
         
            +
                  info = flv_info()
         
     | 
| 
      
 40 
     | 
    
         
            +
                  uri = URI.parse info[:ms]
         
     | 
| 
      
 41 
     | 
    
         
            +
             
     | 
| 
      
 42 
     | 
    
         
            +
                  response = Net::HTTP.new(uri.host).start { |http|
         
     | 
| 
      
 43 
     | 
    
         
            +
                    request = Net::HTTP::Post.new(uri.path)
         
     | 
| 
      
 44 
     | 
    
         
            +
                    thread_id = info[:thread_id]
         
     | 
| 
      
 45 
     | 
    
         
            +
                    version = '20061206'   # 20090904
         
     | 
| 
      
 46 
     | 
    
         
            +
                    language = '0'         # 1 or 2
         
     | 
| 
      
 47 
     | 
    
         
            +
                    frk = 1                # 1:投稿者コメントあり
         
     | 
| 
      
 48 
     | 
    
         
            +
                    term = '0-30:100,1000' # 30分の内、1分間最大100コメ、直近で1000コメ
         
     | 
| 
      
 49 
     | 
    
         
            +
                    request.body = 
         
     | 
| 
      
 50 
     | 
    
         
            +
            "<packet>
         
     | 
| 
      
 51 
     | 
    
         
            +
            <thread thread='#{thread_id}' version='#{version}' scores='1' nicoru='1' language='#{language}' with_global='1'/>
         
     | 
| 
      
 52 
     | 
    
         
            +
            <thread_leaves thread='#{thread_id}' scores='1' nicoru='1' language='0'>#{term}</thread_leaves>
         
     | 
| 
      
 53 
     | 
    
         
            +
            <thread thread='#{thread_id}' version='#{version}' res_from='-#{limit_max}' fork='#{frk}'/>
         
     | 
| 
      
 54 
     | 
    
         
            +
            </packet>"
         
     | 
| 
      
 55 
     | 
    
         
            +
                    http.request(request)
         
     | 
| 
      
 56 
     | 
    
         
            +
                  }
         
     | 
| 
      
 57 
     | 
    
         
            +
             
     | 
| 
      
 58 
     | 
    
         
            +
                  comments = []
         
     | 
| 
      
 59 
     | 
    
         
            +
                  xml = response.body.gsub('</chat>', "</chat>\n")
         
     | 
| 
      
 60 
     | 
    
         
            +
                  xml.split("\n").each do |line|
         
     | 
| 
      
 61 
     | 
    
         
            +
                    line.gsub! /<.*?>/, ''
         
     | 
| 
      
 62 
     | 
    
         
            +
                    comments << line.force_encoding('utf-8') if line.length > 0
         
     | 
| 
      
 63 
     | 
    
         
            +
                  end
         
     | 
| 
      
 64 
     | 
    
         
            +
             
     | 
| 
      
 65 
     | 
    
         
            +
                  @comments = comments
         
     | 
| 
      
 66 
     | 
    
         
            +
                end
         
     | 
| 
      
 67 
     | 
    
         
            +
              end
         
     | 
| 
      
 68 
     | 
    
         
            +
            end
         
     | 
    
        data/nico_util.gemspec
    ADDED
    
    | 
         @@ -0,0 +1,25 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # coding: utf-8
         
     | 
| 
      
 2 
     | 
    
         
            +
            lib = File.expand_path('../lib', __FILE__)
         
     | 
| 
      
 3 
     | 
    
         
            +
            $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
         
     | 
| 
      
 4 
     | 
    
         
            +
            require 'nico_util/version'
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
            Gem::Specification.new do |spec|
         
     | 
| 
      
 7 
     | 
    
         
            +
              spec.name          = "nico_util"
         
     | 
| 
      
 8 
     | 
    
         
            +
              spec.version       = NicoUtil::VERSION
         
     | 
| 
      
 9 
     | 
    
         
            +
              spec.authors       = ["Tatsuya Tanaka (tattn)"]
         
     | 
| 
      
 10 
     | 
    
         
            +
              spec.email         = ["tatsuyars@yahoo.co.jp"]
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
              spec.summary       = %q{Utility APIs for niconico}
         
     | 
| 
      
 13 
     | 
    
         
            +
              spec.description   = %q{Utility APIs for niconico}
         
     | 
| 
      
 14 
     | 
    
         
            +
              spec.homepage      = "https://github.com/tattn/nico_util"
         
     | 
| 
      
 15 
     | 
    
         
            +
              spec.license       = "MIT"
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
              spec.files         = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
         
     | 
| 
      
 18 
     | 
    
         
            +
              spec.bindir        = "exe"
         
     | 
| 
      
 19 
     | 
    
         
            +
              spec.executables   = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
         
     | 
| 
      
 20 
     | 
    
         
            +
              spec.require_paths = ["lib"]
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
              spec.add_development_dependency "bundler", "~> 1.10"
         
     | 
| 
      
 23 
     | 
    
         
            +
              spec.add_development_dependency "rake", "~> 10.0"
         
     | 
| 
      
 24 
     | 
    
         
            +
              spec.add_development_dependency "rspec"
         
     | 
| 
      
 25 
     | 
    
         
            +
            end
         
     | 
    
        metadata
    ADDED
    
    | 
         @@ -0,0 +1,100 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            --- !ruby/object:Gem::Specification
         
     | 
| 
      
 2 
     | 
    
         
            +
            name: nico_util
         
     | 
| 
      
 3 
     | 
    
         
            +
            version: !ruby/object:Gem::Version
         
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.0.1
         
     | 
| 
      
 5 
     | 
    
         
            +
            platform: ruby
         
     | 
| 
      
 6 
     | 
    
         
            +
            authors:
         
     | 
| 
      
 7 
     | 
    
         
            +
            - Tatsuya Tanaka (tattn)
         
     | 
| 
      
 8 
     | 
    
         
            +
            autorequire: 
         
     | 
| 
      
 9 
     | 
    
         
            +
            bindir: exe
         
     | 
| 
      
 10 
     | 
    
         
            +
            cert_chain: []
         
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2015-11-21 00:00:00.000000000 Z
         
     | 
| 
      
 12 
     | 
    
         
            +
            dependencies:
         
     | 
| 
      
 13 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency
         
     | 
| 
      
 14 
     | 
    
         
            +
              name: bundler
         
     | 
| 
      
 15 
     | 
    
         
            +
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
      
 16 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 17 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
      
 18 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 19 
     | 
    
         
            +
                    version: '1.10'
         
     | 
| 
      
 20 
     | 
    
         
            +
              type: :development
         
     | 
| 
      
 21 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 22 
     | 
    
         
            +
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
      
 23 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 24 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
      
 25 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 26 
     | 
    
         
            +
                    version: '1.10'
         
     | 
| 
      
 27 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency
         
     | 
| 
      
 28 
     | 
    
         
            +
              name: rake
         
     | 
| 
      
 29 
     | 
    
         
            +
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
      
 30 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 31 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
      
 32 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 33 
     | 
    
         
            +
                    version: '10.0'
         
     | 
| 
      
 34 
     | 
    
         
            +
              type: :development
         
     | 
| 
      
 35 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 36 
     | 
    
         
            +
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
      
 37 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 38 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
      
 39 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 40 
     | 
    
         
            +
                    version: '10.0'
         
     | 
| 
      
 41 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency
         
     | 
| 
      
 42 
     | 
    
         
            +
              name: rspec
         
     | 
| 
      
 43 
     | 
    
         
            +
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
      
 44 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 45 
     | 
    
         
            +
                - - ">="
         
     | 
| 
      
 46 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 47 
     | 
    
         
            +
                    version: '0'
         
     | 
| 
      
 48 
     | 
    
         
            +
              type: :development
         
     | 
| 
      
 49 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 50 
     | 
    
         
            +
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
      
 51 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 52 
     | 
    
         
            +
                - - ">="
         
     | 
| 
      
 53 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 54 
     | 
    
         
            +
                    version: '0'
         
     | 
| 
      
 55 
     | 
    
         
            +
            description: Utility APIs for niconico
         
     | 
| 
      
 56 
     | 
    
         
            +
            email:
         
     | 
| 
      
 57 
     | 
    
         
            +
            - tatsuyars@yahoo.co.jp
         
     | 
| 
      
 58 
     | 
    
         
            +
            executables: []
         
     | 
| 
      
 59 
     | 
    
         
            +
            extensions: []
         
     | 
| 
      
 60 
     | 
    
         
            +
            extra_rdoc_files: []
         
     | 
| 
      
 61 
     | 
    
         
            +
            files:
         
     | 
| 
      
 62 
     | 
    
         
            +
            - ".gitignore"
         
     | 
| 
      
 63 
     | 
    
         
            +
            - ".rspec"
         
     | 
| 
      
 64 
     | 
    
         
            +
            - ".travis.yml"
         
     | 
| 
      
 65 
     | 
    
         
            +
            - Gemfile
         
     | 
| 
      
 66 
     | 
    
         
            +
            - LICENSE.txt
         
     | 
| 
      
 67 
     | 
    
         
            +
            - README.md
         
     | 
| 
      
 68 
     | 
    
         
            +
            - Rakefile
         
     | 
| 
      
 69 
     | 
    
         
            +
            - bin/console
         
     | 
| 
      
 70 
     | 
    
         
            +
            - bin/setup
         
     | 
| 
      
 71 
     | 
    
         
            +
            - lib/live.rb
         
     | 
| 
      
 72 
     | 
    
         
            +
            - lib/nico_util.rb
         
     | 
| 
      
 73 
     | 
    
         
            +
            - lib/nico_util/version.rb
         
     | 
| 
      
 74 
     | 
    
         
            +
            - lib/video.rb
         
     | 
| 
      
 75 
     | 
    
         
            +
            - nico_util.gemspec
         
     | 
| 
      
 76 
     | 
    
         
            +
            homepage: https://github.com/tattn/nico_util
         
     | 
| 
      
 77 
     | 
    
         
            +
            licenses:
         
     | 
| 
      
 78 
     | 
    
         
            +
            - MIT
         
     | 
| 
      
 79 
     | 
    
         
            +
            metadata: {}
         
     | 
| 
      
 80 
     | 
    
         
            +
            post_install_message: 
         
     | 
| 
      
 81 
     | 
    
         
            +
            rdoc_options: []
         
     | 
| 
      
 82 
     | 
    
         
            +
            require_paths:
         
     | 
| 
      
 83 
     | 
    
         
            +
            - lib
         
     | 
| 
      
 84 
     | 
    
         
            +
            required_ruby_version: !ruby/object:Gem::Requirement
         
     | 
| 
      
 85 
     | 
    
         
            +
              requirements:
         
     | 
| 
      
 86 
     | 
    
         
            +
              - - ">="
         
     | 
| 
      
 87 
     | 
    
         
            +
                - !ruby/object:Gem::Version
         
     | 
| 
      
 88 
     | 
    
         
            +
                  version: '0'
         
     | 
| 
      
 89 
     | 
    
         
            +
            required_rubygems_version: !ruby/object:Gem::Requirement
         
     | 
| 
      
 90 
     | 
    
         
            +
              requirements:
         
     | 
| 
      
 91 
     | 
    
         
            +
              - - ">="
         
     | 
| 
      
 92 
     | 
    
         
            +
                - !ruby/object:Gem::Version
         
     | 
| 
      
 93 
     | 
    
         
            +
                  version: '0'
         
     | 
| 
      
 94 
     | 
    
         
            +
            requirements: []
         
     | 
| 
      
 95 
     | 
    
         
            +
            rubyforge_project: 
         
     | 
| 
      
 96 
     | 
    
         
            +
            rubygems_version: 2.5.0
         
     | 
| 
      
 97 
     | 
    
         
            +
            signing_key: 
         
     | 
| 
      
 98 
     | 
    
         
            +
            specification_version: 4
         
     | 
| 
      
 99 
     | 
    
         
            +
            summary: Utility APIs for niconico
         
     | 
| 
      
 100 
     | 
    
         
            +
            test_files: []
         
     |