社交媒体操作的通用 API

Posted

技术标签:

【中文标题】社交媒体操作的通用 API【英文标题】:Generic API for Social Media Actions 【发布时间】:2012-12-10 04:51:06 【问题描述】:

我正在创建一个需要与多个社交网络平台集成的 MVC4 网站。框架中内置的新 OAuthWebSecurity 类解决了身份验证和授权问题。

我的模型有文章和评论类型的对象。这两个对象都是“社交的”,即可以共享、发布喜欢等

我被困在试图为此找到一个优雅的实现

目前我已经定义了以下类和接口

ISocial - 定义“社交”类型应实现的最小方法

文章和评论实现 ISocial

IProvider - 定义社交媒体提供商的属性和方法,例如 AppId、AppSecret 和所需的端点

FacebookProvider 和 TwitterProvider 实现 IProvider

当前用户已授权的网络可用

OAuthWebSecurity.GetAccountsFromUserName(User.Identity.Name)

如何实现执行 ISocial 中定义的操作的 GenericAPI (JSON)

Share() - 分享/推文/评论到用户墙

Comment() - 如果是文章,则为文章创建新评论,如果是评论,则回复现有评论

需要对拟议结构的实施建议和/或关键分析

谢谢

【问题讨论】:

【参考方案1】:

关于管理您的“提供者”的说明;如果您的提供商能够做同样的事情,但有不同的实现,您可以采用Strategy Pattern

说明

在计算机编程中,策略模式(也称为 策略模式)是一种特殊的软件设计模式,其中一个 算法的行为可以在运行时选择。正式地说, 策略模式定义了一系列算法,封装了每一个 一,并使它们可以互换。策略让算法变化 独立于使用它的客户。

在您的情况下,不同的“算法”是每个提供商的逻辑(例如,在 Facebook 上添加评论的代码或在 Google+ 上发布新文章的代码)。

在下面的示例中,SocialContext 是用于执行每个 Provider 的通用函数的对象。你只需要通过调用SetProvider(IProvider provider)来设置Provider

您的 API 调用方法可以模仿 SocialContext 方法以及一些代码来决定在运行时使用哪个 Provider。

这是你的例子:

namespace StrategyPattern

    class Program
    
        static void Main(string[] args)
        
            var context = new SocialContext();

        context.SetProvider(new FacebookProvider()); //switch which provider you want to use

        context.AddComment(new Comment()
            
                Message = "Heres my Comment!"
            );
    



//providers

public interface IProvider

    void AddComment(Comment comment);
    void PostArticle(Article article);


public class FacebookProvider :IProvider

    public void AddComment(Comment comment)
    
        //facebook implementation of "AddComment"
    

    public void PostArticle(Article article)
    
        //facebook implementation of "PostArticle"
    


public class TwitterProvider : IProvider

    public void AddComment(Comment comment)
    
        //twitter implementation of "AddComment"
    

    public void PostArticle(Article article)
    
        //twitter implementation of "PostArticle"
    



public class Article

    public string Content  get; set; 


public class Comment

    public String Message  get; set; 




//context to use the providers

public class SocialContext

    private IProvider _provider;

    public void SetProvider(IProvider provider)
    
        _provider = provider;
    

    public IProvider GetProvide  get  return _provider;  

    public void AddComment(Comment comment)
    
        _provider.AddComment(comment);
    

    public void PostArticle(Article article)
    
        _provider.PostArticle(article);
    

【讨论】:

感谢 Mike 的提醒 .. 无论如何,我都可以使用单一的 Post 方法来发表文章和评论 .. 我在考虑泛型,但我不确定我是否会因为新奇而过度复杂化我的代码 实际上它不仅新颖,我希望能够将评论分享到用户墙上,API 调用将相同,内容将根据对象类型而有所不同,无论如何我可以避免使用 sharearticle 和 sharecomment 而只使用 share 只有在 IProvider 上有一个 Share(Item item) 方法,这不会阻止你。您似乎想使用相同的方法对不同的对象执行不同的操作。考虑到这个问题 - 我会考虑审查您的设计。 对当前设计缺陷的指针将受到高度重视。如果您能指出正确的方向,我会很乐意将此标记为答案,(并不是说我不认可您已经做出的努力).. 任何模式技巧? 不幸的是,我正在尝试的并不是真正可行的,因为对不同实体执行操作的 API 调用不同,所以我相信我必须按照你的建议实现我的要求。由于我还没有所需的声誉,因此无法对您的回复进行投票。谢谢迈克。

以上是关于社交媒体操作的通用 API的主要内容,如果未能解决你的问题,请参考以下文章

如何使用流构建器和块模式更好地构建社交媒体应用程序

用于聚合我的社交媒体流的 PHP 库 [关闭]

如何用python 爬虫在社交媒体上抓取评论

常见的社交媒体都有哪些

社交媒体之大数据挖掘

新数据显示社交媒体影响力和参与度对流媒体增长至关重要