【问题标题】:Using bitly in Ruby on Rails在 Ruby on Rails 中使用 bitly
【发布时间】:2014-01-12 18:15:01
【问题描述】:

我正在构建一个小型应用程序,用户可以在其中发布短消息和网址 (twitter)

为了呈现带有 url 的帖子,我使用自动链接 gem https://github.com/tenderlove/rails_autolink 和以下代码,从文本中提取 url 并将它们转换为链接:

<%= auto_link(feed_item.content) %>

我还设法通过使用 bitly api 和 bitly gem 来呈现缩短的 url; https://github.com/philnash/bitly/

<%= auto_link(client.shorten("http://google.com").short_url) %>

我尝试在创建帖子时使用模型中的以下代码进行缩短。

class Micropost < ActiveRecord::Base
  before_create :bitly_shorten

  private

  def bitly_shorten
    client = Bitly.client 
    urls = URI.extract(self.content) 
     urls.each do |url|
        self.content.gsub(url, client.shorten(url).short_url) 
    end
  end
end

即使链接显示在我的 bitly 仪表板中,也只有完整的 url 会保存到数据库中。这段代码有什么问题?

【问题讨论】:

  • 就像 Rovin 和 Simone 所说,如果可能的话,您应该避免在每次页面查看时调用 Bitly API,因为两次缩短相同的长 URL 总是会返回相同的短 URL,但确实如此计入速率限制。

标签: ruby-on-rails ruby bit.ly


【解决方案1】:

以下是您需要遵循的步骤

  1. 首先,您需要提取消息中的所有 URL

    urls = URI.extract(feed_item.content) 
    
  2. 然后用Bitly缩短网址替换所有网址

    urls.each do |url|
      feed_item.content.gsub(url, client.shorten(url).short_url)  
    end
    
  3. 然后使用 auto_link

    <%= auto_link(feed_item.content) %> 
    

【讨论】:

  • 您也可以按照步骤 1 和 2 在创建消息时将 URL 转换为位 URL
  • 那么在创建时我应该如何使用这段代码呢?在模型中使用 before_create 方法?
【解决方案2】:

您可能应该在用户创建帖子时执行缩短。

创建帖子时,请从消息中提取所有链接并缩短它们。 然后你只需要在运行时显示内容。

这样更高效,因为它会阻止页面在每次呈现视图时调用缩短服务。

【讨论】:

  • 对上面的代码在创建的时候如何使用有什么建议吗?
【解决方案3】:

在控制台中尝试了代码后,我意识到我错过了 gsub 之后的 !,这使得替换的 url 无法保存到数据库中。..

以下解决方案对我有用;

class Micropost < ActiveRecord::Base
  before_validation :bitly_shorten #shorten before the 150 character limit validation

  private

  def bitly_shorten
    client = Bitly.client 
    urls = URI.extract(self.content) 
     urls.each do |url|
        self.content.gsub!(url, client.shorten(url).short_url) 
    end
  end
end

【讨论】:

    猜你喜欢
    • 2014-07-29
    • 2011-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-05
    • 2011-03-14
    • 2012-07-12
    相关资源
    最近更新 更多