2015-06-30 10 views
12

मैं आपको अपने रेल 4 ऐप में ट्यूब को शामिल करने की कोशिश कर रहा हूं।रेल 4: आप ट्यूब को एकीकृत करना (youtube_it मणि)

मैं चाहता हूं कि उपयोगकर्ता एक वीडियो फ़ाइल अपलोड करने में सक्षम हों, जिसे मेरे ट्यूब चैनल पर पोस्ट किया जाएगा।

मैं Youtube_it मणि के साथ रेल 4 का उपयोग कर रहा हूं। मैं इस ट्यूटोरियल का पालन करने की कोशिश कर रहा हूं: http://www.sitepoint.com/youtube-rails/

मेरी फ़ाइल संरचना में प्रोजेक्ट मॉडल और एक वीडियो मॉडल है। संघों हैं:

Project.rb

has_one :video 
    accepts_nested_attributes_for :video 

Video.rb

belongs_to :project 

मेरे वीडियो मेज एक बूलियन विशेषता कहा जाता है: include_video।

<%= f.collection_radio_buttons :include_video, [[true, ' Yes'], [false, ' No']], :first, :last, {:item_wrapper_class => 'fixradio'}, {:class => "radio-inline create-project response-project"} %> 

अगर यह सच है, तो मैं जहाँ उपयोगकर्ताओं को वीडियो के साथ लिंक (: लिंक विशेषता कहा जाता है) को जोड़ने के क्षेत्र प्रकट करना चाहते हैं।

<%= f.file_field :link %> 

वीडियो फॉर्म जिसमें मैं इन प्रश्नों से पूछता हूं वह आंशिक है। आंशिक परियोजना प्रपत्र के अंदर है जिसमें अन्य प्रश्न हैं। मेरे पास आंशिक दृश्य भी है जिसमें आपके ट्यूब क्लिप के लिए कंटेनर है (जैसा कि ट्यूटोरियल में दिखाया गया है)।

दृश्य आंशिक रूप में मेरे परियोजना शो पेज में शामिल है:

<% if @project.video.include_video? %> 

      <%= render 'videos/particulars' %> 
    <% end %> 

मेरे परियोजना नियंत्रक है:

def new 
    @project = Project.new 
    @project.video = Video.new 
end 
def show 
    #authorise @project 
    @project = Project.find(params[:id]) 
    @creator = User.find(@project.creator_id) 
    @creator_profile = @creator.profile 
    @project.video ||= Video.new 

    end 

मेरे परियोजना नियंत्रक भी मेरे वीडियो मेज से सफेद लेबल गुण होते हैं (जैसा कि होता है मेरा वीडियो नियंत्रक

def project_params 
     params.require(:project).permit(
     video_attributes: [:include_video, :link], 

मेरा वीडियो नियंत्रक है:

def show 
    respond_with(@video) 
    end 


def create 

    @video = Video.new(video_params) 
    @video.project_id = video_params[:project_id] 

    end 

    def video_params 
     params[:video].permit(:include_video, :link, :project_id) 
    end 

मेरे video.rb है:

class Video < ActiveRecord::Base 

    # --------------- associations 
    belongs_to :project 
    belongs_to :program 
    belongs_to :proposal 
    belongs_to :profile 
    belongs_to :user 


    # --------------- scopes 
    # --------------- validations 

    YT_LINK_FORMAT = /\A.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|\&v=)([^#\&\?]*).*\z/i 

    validates :link, presence: true, format: YT_LINK_FORMAT 


    # --------------- class methods 

    # --------------- callbacks 

    before_create -> do 
    uid = link.match(YT_LINK_FORMAT) 
    self.uid = uid[2] if uid && uid[2] 

    if self.uid.to_s.length != 11 
     self.errors.add(:link, 'is invalid.') 
     false 
    elsif Video.where(uid: self.uid).any? 
     self.errors.add(:link, 'is not unique.') 
     false 
    else 
     get_additional_info 
    end 
    end 

    # --------------- instance methods 

    # --------------- private methods 

    def get_additional_info 
    begin 
     client = YouTubeIt::OAuth2Client.new(dev_key: ENV['YT_developer_key']) 
     video = client.video_by(uid) 
     self.title = video.title 
     self.duration = parse_duration(video.duration) 
     self.author = video.author.name 
     self.likes = video.rating.likes 
    rescue 
     self.title = '' ; self.duration = '00:00:00' ; self.author = '' ; self.likes = 0 ; self.dislikes = 0 
    end 
    end 

    def parse_duration(d) 
    hr = (d/3600).floor 
    min = ((d - (hr * 3600))/60).floor 
    sec = (d - (hr * 3600) - (min * 60)).floor 

    hr = '0' + hr.to_s if hr.to_i < 10 
    min = '0' + min.to_s if min.to_i < 10 
    sec = '0' + sec.to_s if sec.to_i < 10 

    hr.to_s + ':' + min.to_s + ':' + sec.to_s 
    end 
end 

मैं एक संबंधित समस्या थी और इस पोस्ट से मदद मिली: एक नई समस्या Rails 4 with You Tube

हालांकि, यह बनाया गया है और मैं नहीं जानता कि अगर यह एक समाधान की ओर मेरी प्रगति को आगे बढ़ा रहा है।

बिट जो नया है (दूसरे पोस्ट किए गए प्रश्न पर किसी उपयोगकर्ता द्वारा किए गए सुझाव से) वीडियो के लिए मेरे प्रोजेक्ट नियंत्रक को एक शो लाइन जोड़ना है। जब मैं यह कोशिश, मैं इस त्रुटि मिलती है:

Failed to save the new associated video. 

जब मैं जो वीडियो प्रपत्र के भीतर आंशिक है एक पूरी तरह से नई परियोजना बनाने की कोशिश, मैं प्रपत्र सहेजने में कोई त्रुटि मिलती है। यह कहता है कि वीडियो लिंक मान्य नहीं है (मैं अपनी हार्ड ड्राइव से .mov फ़ाइल का चयन कर रहा हूं)।

मैंने फिर अपने वीडियो में सत्यापन बदल दिया।rb रहे हैं:

validates :link, format: YT_LINK_FORMAT, :allow_blank => true, :allow_nil => true 

(यानी हटाने के:। उपस्थिति: सच है, और खाली और शून्य जोड़ने, लेकिन मैं अभी भी है कि त्रुटि मिलती है)

मैं इस पता लगाना दृष्टिकोण है?

उत्तर

-1

आप Google के साथ पूर्ण लेख के लिए omniauth-google-oauth2 मणि का उपयोग कर सकते हैं।

और devise.rb में:

config.omniauth :google_oauth2, ENV['GP_key'], ENV['GP_secret'], 
    { 
        name: 'google', 
        scope: 'plus.login, userinfo.email, userinfo.profile, 
          ... 
          youtube, youtube.readonly, youtubepartner, 
          youtube.upload, youtubepartner, 
          youtubepartner-channel-audit', 
        prompt: "select_account" 
    } 

मुझे आशा है कि, यह आप difficultes का समाधान होगा ...

1

मैं क्योंकि उन्हें YouTube एपीआई के वी 2 (का उपयोग करता youtube_it माणिक रत्न का उपयोग नहीं होता जो 20 अप्रैल, 2015 से समर्थित नहीं है)। मैं yt रूबी मणि (जो यूट्यूब एपीआई के नवीनतम संस्करण का उपयोग करता है) का उपयोग करने का सुझाव देगा।

A tutorial on the yt gem and why you shouldn't use youtube_it

आपका मुद्दों सबसे अधिक संभावना है कि यूट्यूब एपीआई द्वारा समर्थित नहीं किया जा रहा है youtube_it कार्यों का उपयोग करने की कोशिश कर से संबंधित हैं। यह आपके कोड को दोबारा करने के लिए बहुत सारे काम की तरह प्रतीत हो सकता है, लेकिन मुझे यकीन है कि यह आपको सड़क के नीचे बहुत सी सिरदर्द बचाएगा (विशेष रूप से चूंकि youtube_it बहुत अच्छी तरह से बनाए रखा नहीं लगता है)।

संबंधित मुद्दे