рдЯреНрд╡рд┐рдЯрд░, рдлреЗрд╕рдмреБрдХ, livejournal, vkontakte рдкрд░ рдХреНрд░реЙрд╕рдкреЛрд╕реНрдЯ рдХрд░рдирд╛


рдЬрдм рдореИрдВрдиреЗ crafthunters.com рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд▓рд┐рдЦрд╛, рддреЛ рдореИрдВрдиреЗ рджреЗрдЦрд╛ рдХрд┐ рдЧреНрд░рд╛рд╣рдХ рдкреНрд░рдЪрд╛рд░ рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдЬрд┐рдХ рдиреЗрдЯрд╡рд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рд╣рдордиреЗ рд╡рд┐рдЧреЗрдЯреНрд╕ рдФрд░ рд▓рд╛рдЗрдХ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдЕрдЪреНрдЫреЗ рдХреЗ рд▓рд┐рдП рдиреНрдпреВрдЬ рдлреАрдб рдореЗрдВ рдЖрдирд╛ рдЬрд░реВрд░реА рдерд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд▓реЛрдХрдкреНрд░рд┐рдп VKontakte рд╕рд┐рддрдВрдмрд░ рдореЗрдВ рдореБрдЦреНрдп рдкреГрд╖реНрда рдкрд░ рд╕рдорд╛рдЪрд╛рд░ рд▓рд╛рдпрд╛ред рдпрд╛рдиреА рд╕рд╛рдордЧреНрд░реА рд╡рд┐рддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рд╛рдорд╛рдЬрд┐рдХ рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рдкреНрд░рд╕реНрддреБрддрд┐ рдХреЗ рд▓рд┐рдП рд╕реНрдЯреИрдВрдбрдЕрд▓реЛрди рдмреНрд▓реЙрдЧ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛, рд╕рд░рд▓ рд╕рддреНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП: рд▓реЛрдХрдкреНрд░рд┐рдп рд╕рд╛рдорд╛рдЬрд┐рдХ рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рд╕рдорд╛рдЪрд╛рд░ рдлрд╝реАрдб рдореЗрдВ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдПред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд╣реБрдЖ рдФрд░ рдЖрдзреЗ рд╕реЗ рдЕрдзрд┐рдХ рдпрд╛рддрд╛рдпрд╛рдд рдореЗрдВ рд▓рд╛рдпрд╛ рдЧрдпрд╛ред рдлрд┐рд░ рд╕рдм рдХреБрдЫ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рдЪрд╛рд░ рдЖрдпрд╛ред
рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд▓реЛрдХрдкреНрд░рд┐рдп рд╕рд╛рдорд╛рдЬрд┐рдХ рдиреЗрдЯрд╡рд░реНрдХ:

рдкреНрд░рддреНрдпреЗрдХ рд╕рд╛рдорд╛рдЬрд┐рдХ рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХреНрд░реЙрд╕-рдкреЛрд╕реНрдЯрд┐рдВрдЧ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛, рдЬреЛ рдкрд╣рд▓реЗ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдпрд╣ рднреА рд╕реНрдкрд╖реНрдЯ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рд╕рд╛рдорд╛рдЬрд┐рдХ рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рдкреЛрд╕реНрдЯ рдХрд░рдирд╛ рдХрд┐рд╕реА рдХреА рджреАрд╡рд╛рд░ / рдмреНрд▓реЙрдЧ рдореЗрдВ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рд╕рдореВрд╣ / рд╕рдореБрджрд╛рдп рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдерд╛ред

рдЕрдЧрд▓рд╛, рдореИрдВ asp.net mvc рдХреЗ рд▓рд┐рдП рдЗрди рдЪрд╛рд░ рд╕рд╛рдорд╛рдЬрд┐рдХ рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рд▓рд┐рдП рдХреНрд░реЙрд╕-рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред


0. рдореВрд▓ рд╕рд┐рджреНрдзрд╛рдВрддред



рдкрд╣рд▓реА рдЪреАрдЬреЗрдВ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ рдЕрдзрд┐рдХрд╛рд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдФрд░ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд╕рд╣реЗрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рджреВрд╕рд░рд╛ рдЪрд░рдг рдпрд╣ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рдерд╛ рдХрд┐ рдХрд┐рд╕ рд╕рдореВрд╣ / рд╕рдореБрджрд╛рдп рдореЗрдВ рд╕рд╛рдордЧреНрд░реА рдЬреЛрдбрд╝реА рдЬрд╛рдПрдЧреА (рдХрд╛рд░реНрдп рдХреЗрд╡рд▓ рд╕рдВрдкрд░реНрдХ рдХреЗ рд▓рд┐рдП рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рд╣реИ)ред рддреАрд╕рд░рд╛ рдХрджрдо рдореВрд▓ рдкрдж рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдХреНрд░рд┐рдп рд▓рд┐рдВрдХ рдХреЗ рд╕рд╛рде рд╕рдореВрд╣ / рд╕рдореБрджрд╛рдп рдореЗрдВ рдПрдХ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдмрдирд╛рдирд╛ рдерд╛ред

OAuth рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдПрдХ рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЯреНрд╡рд┐рдЯрд░, рдлреЗрд╕рдмреБрдХ рдФрд░ vkontakte рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЙрдирдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрди рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреНрдпреЗрдХ рд╕рд╛рдорд╛рдЬрд┐рдХ рдиреЗрдЯрд╡рд░реНрдХ рдореЗрдВ рдПрдХ рдЖрд╡реЗрджрди рдкрдВрдЬреАрдХреГрдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛ред

рдЕрдкрдиреЗ рдЖрдк рдХреЛ рдирд╣реАрдВ рджреЛрд╣рд░рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рддреБрд░рдВрдд рдЖрдкрдХреЛ рдмрддрд╛рдКрдВрдЧрд╛ рдХрд┐ OAuth рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХреИрд╕реЗ рд╣реЛрддрд╛ рд╣реИ (рдЯреНрд╡рд┐рдЯрд░ xAuth рдХреЗ рд▓рд┐рдП)ред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдЖрд╡реЗрджрди рдХреА рдЖрдИрдбреА рдФрд░ рдЙрди рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдХреА рд╕реВрдЪреА рдХреЛ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдХреА рд╕реВрдЪреА рд╡рд╣ рд╕рдВрд╕рд╛рдзрди рд╣реИ рдЬреЛ рд╣рдо рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рддрдХ рдкрд╣реБрдВрдЪ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:



рдЕрдиреБрдорддрд┐ рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ рд╡рд╣ рдХреЛрдб рдорд┐рд▓рддрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рд╣рдореЗрдВ рдПрдХреНрд╕реЗрд╕ рдЯреЛрдХрди рдорд┐рд▓рддрд╛ рд╣реИред рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рд╕рд░реНрд╡рд░ рдЕрдиреБрд░реЛрдз рдХреЗ рд▓рд┐рдП рдЗрд╕ рдЯреЛрдХрди рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕ рддрд░рд╣ рд╕реЗрд╡рд╛ рдкреНрд░рджрд╛рддрд╛ (VKontakte, рдлреЗрд╕рдмреБрдХ рдФрд░ рдЯреНрд╡рд┐рдЯрд░) рдХреЛ рдкрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдкрд░ рднрд░реЛрд╕рд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рд╣рдореЗрдВ рдПрдХ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИ (рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдХреНрд░реЙрд╕-рдкреЛрд╕реНрдЯрд┐рдВрдЧ)ред

1. рдЖрдЬреАрд╡рд┐рдХрд╛



LJ рдХрд╛ рдЙрдкрдпреЛрдЧ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдХреНрд░реЙрд╕-рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдпрд╣ XML-RPC рдХрдорд╛рдВрдб рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд░рддрд╛ рд╣реИред
рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж ( ред Http://www.livejournal.com/doc/server/ljp.csp.xml-rpc.protocol.html ) .net xml-rpc ( http://www.xml-rpc.net/ ) рдХреЗ рд▓рд┐рдП рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИ ред ) рдореИрдВрдиреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╢реБрд░реВ рдХрд┐рдпрд╛ред

рдПрдХ рдЗрдВрдЯрд░реИрдХреНрд╢рди рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдмрдирд╛рдПрдВ:

public interface ILj : IXmlRpcProxy { [XmlRpcMethod("LJ.XMLRPC.login")] LjUserInfo Login(UserPassword user); XmlRpcMethod("LJ.XMLRPC.postevent")] PostLjAnswer Post(PostLj post); } 


рдкрд╣реБрдБрдЪ рдкрд╛рдирд╛



рд▓реЙрдЧрд┐рди рдФрд░ рдкрд╛рд╕рд╡рд░реНрдб рд╕реНрдкрд╖реНрдЯ рдкрд╛рда рдореЗрдВ рдкреНрд░реЗрд╖рд┐рдд рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рд╡реЗрдм рд╕реЗрд╡рд╛ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░реЗрд╖рд┐рдд рд╣реЛрддреЗ рд╣реИрдВред рд╣рдо рдЕрдзрд┐рдХрд╛рд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд░реНрдЧ рдмрдирд╛рддреЗ рд╣реИрдВред
 public class UserPassword { [JsonProperty("username")] public string username { get; set; } [JsonProperty("password")] public string password { get; set; } public int ver { get { return 1; } } } 


рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдХрд╛рд╢рди рдореЗрдВ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рдФрд░ рдкрд╛рд╕рд╡рд░реНрдб рднреА рдкреНрд░реЗрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд▓реЙрдЧрд┐рди рд╡рд┐рдзрд┐ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдХреЗрд╡рд▓ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо / рдкрд╛рд╕рд╡рд░реНрдб рдЬреЛрдбрд╝реА рдХреА рд╢реБрджреНрдзрддрд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреА рд╣реИред

рдкрд╣реБрдВрдЪ рдЬрд╛рдБрдЪ рдХрд░реЗрдВред


 public LjUserInfo Auth(UserPassword username) { ILj proxy = XmlRpcProxyGen.Create<ILj>(); var ans = proxy.Login(username); return ans; } 

рд╣рдо рдЙрддреНрддрд░ ans рдХреЛ рд╕рдХрд╛рд░рд╛рддреНрдордХ рдЙрддреНрддрд░ рджреЗрддреЗ рд╣реИрдВ, рдЕрдиреНрдпрдерд╛, рд╣рдо рдПрдХ рддреНрд░реБрдЯрд┐ рджреЗрддреЗ рд╣реИрдВред

рд░рд┐рдХреЙрд░реНрдб рдЬреЛрдбрд╝рдирд╛ рдХреЗрд╡рд▓ рддреБрдЪреНрдЫ рдХреЗ рд░реВрдк рдореЗрдВ рд╣реИ:
 public void Publish(UserPassword username, Post message, string ljgroup = null) { ILj proxy = XmlRpcProxyGen.Create<ILj>(); var post = new PostLj(); post.username = username.username; post.password = username.password; post.ver = 1; post.@event = message.Content; post.subject = message.Title; post.lineendings = "pc"; post.year = DateTime.Now.Year; post.mon = DateTime.Now.Month; post.day = DateTime.Now.Day; post.hour = DateTime.Now.Hour; post.min = DateTime.Now.Minute; if (!string.IsNullOrWhiteSpace(ljgroup)) { post.usejournal = ljgroup; } else { post.usejournal = username.username; } var ans = proxy.Post(post); } 

рджрд░рдЕрд╕рд▓, рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИред рдмреЗрд╢рдХ, рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ рдФрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛рдлреА рд╡реНрдпрд╛рдкрдХ рд╣реИ, рд▓реЗрдХрд┐рди рдХрд╛рд░реНрдп - рд╣рдорд╛рд░реА рдкреЛрд╕реНрдЯ рдХреЛ рдПрд▓рдЬреЗ рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП - рдЖрд╕рд╛рдиреА рд╕реЗ рд╣рд▓ рд╣реЛ рдЧрдпрд╛ рд╣реИред

рдЬреИрд╕рд╛ рдореИрдВрдиреЗ рдХрд┐рдпрд╛ рдерд╛ рд╡рд╣ рд╕реНрдкрд╖реНрдЯ рдкрд╛рда рдореЗрдВ рдпрд╛ рдПрдХ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдЪреИрдирд▓ рдкрд░ md5 рдореЗрдВ рдкрд╛рд╕рд╡рд░реНрдб рдХрд╛ рдкреНрд░рд╕рд╛рд░рдг рдирд╣реАрдВ рдерд╛ред

2. рдЯреНрд╡рд┐рдЯрд░



рдЯреНрд╡рд┐рдЯрд░ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рд▓реЛрдХрдкреНрд░рд┐рдп рдкреБрд╕реНрддрдХрд╛рд▓рдп www.twitterizer.net рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ , рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ рдореБрдЭреЗ dev.twitter.com/apps рдкрд░ рдЖрд╡реЗрджрди рдкрдВрдЬреАрдХреГрдд рдХрд░рдирд╛ рдкрдбрд╝рд╛ред

рдЖрд╡реЗрджрди рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдХреЛ рдкрдврд╝рд╛ рдФрд░ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдирдВрдд рдЯреЛрдХрди рд╕рдорд╛рдкреНрддрд┐ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреА рд╣реИред рдЗрд╕ рдЯреЛрдХрди рдХреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред (рд╕реЛрд╢рд▓.рдЬрд╕рдиред рд╕реЛрд░реНрд╕ рдЯреЗрдмрд▓)

рдЕрдзрд┐рдХрд╛рд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрд░рд┐рджреГрд╢реНрдп рдореЗрдВ рдЖрддрд╛ рд╣реИ:
 public string Authorize(string redirectTo) { OAuthTokenResponse requestToken = OAuthUtility.GetRequestToken(Config.twitterConsumerKey, Config.twitterConsumerSecret, redirectTo); // Direct or instruct the user to the following address: Uri authorizationUri = OAuthUtility.BuildAuthorizationUri(requestToken.Token); return authorizationUri.ToString(); } 

рд╣рдо рджреЛ рдХреБрдВрдЬреА (рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреБрдВрдЬреА рдФрд░ рдЧреБрдкреНрдд рдХреБрдВрдЬреА) рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЯреНрд╡рд┐рдЯрд░ рдкреЗрдЬ рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВред рдЯреНрд╡рд┐рдЯрд░ рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдХреА рдорд╛рдВрдЧ рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╣рдореЗрдВ рдЙрд╕ рдкрддреЗ рдкрд░ рд╡рд╛рдкрд╕ рднреЗрдЬ рджреЗрддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдЕрддрд┐рд░рд┐рдХреНрдд рд░реВрдк рд╕реЗ рдХреЛрдб рдкрд╛рд╕ рд╣реЛрддрд╛ рд╣реИред рдЗрд╕ рдХреЛрдб рд╕реЗ рд╣рдореЗрдВ рдПрдХреНрд╕реЗрд╕ рдЯреЛрдХрди рдорд┐рд▓рддрд╛ рд╣реИред рдЕрдЧрд▓рд╛, рд╣рдо рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реНрдерд┐рддрд┐ рдЕрдкрдбреЗрдЯ рдХрд░рддреЗ рд╣реИрдВ (рдПрдХ рдЫреЛрдЯрд╛ рд╕рдВрджреЗрд╢ рдмрдирд╛рддреЗ рд╣реИрдВ):
 public void Publish(Post post) { var tokens = new OAuthTokens(); tokens.ConsumerKey = Config.twitterConsumerKey; tokens.ConsumerSecret = Config.twitterConsumerSecret; tokens.AccessToken = twitterAccessToken.Token; tokens.AccessTokenSecret = twitterAccessToken.TokenSecret; TwitterStatus.Update(tokens, post.TwitterText); } 


3. рдлреЗрд╕рдмреБрдХ



рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдпрд╣рд╛рдВ рдкрдВрдЬреАрдХреГрдд рдХрд░реЗрдВ: Developers.facebook.com/apps

рд╣рдореЗрдВ рдПрдХреНрд╕реЗрд╕ рдЯреЛрдХрди рдорд┐рд▓рддрд╛ рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдЕрдиреБрдорддрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреЗрдЬрддреЗ рд╣реИрдВ:
 public string Authorize(string redirectTo) { return string.Format(AuthorizeUri, Config.AppId, redirectTo); } public ActionResult GetFbCode() { var fbSocial = currentUser.Socials.Where(p => p.Provider == "facebook").FirstOrDefault(); if (fbSocial != null) { return RedirectToAction("Index"); } else { return Redirect(fbProvider.Authorize("http://" + HostName + "/Social/SaveFbCode")); } } 

рд╣рдо рдПрдХреНрд╕реЗрд╕ рдЯреЛрдХрди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдкреНрд░реЛрд╕реЗрд╕ рдХрд░рддреЗ рд╣реИрдВ:
 public ActionResult SaveFbCode() { if (Request.Params.AllKeys.Contains("code")) { var code = Request.Params["code"]; if (ProcessFbCode(code)) { return RedirectToAction("Index"); } } return View("CantInitialize"); } protected bool ProcessFbCode(string code) { if (fbProvider.GetAccessToken(code, "http://" + HostName + "/Social/SaveFbCode")) { var jObj = fbProvider.GetUserInfo(); var fbUserInfo = JsonConvert.DeserializeObject<FbUserInfo>(jObj.ToString()); var fbAccess = new FbAccessToken() { AccessToken = fbProvider.AccessToken }; var jsonFbAccess = JsonConvert.SerializeObject(fbAccess); var fbSocial = currentUser.Socials.Where(p => p.Provider == "facebook").FirstOrDefault(); if (fbSocial == null) { fbSocial = new Models.Social() { UserID = currentUser.ID, JsonResource = jsonFbAccess.ToString(), Provider = "facebook", UserInfo = jObj.ToString() }; repository.CreateSocial(fbSocial); } else { fbSocial.UserInfo = jObj.ToString(); repository.UpdateSocial(fbSocial); } return true; } return false; } 

рдпрд╣рд╛рдВ, рдЕрд╕реАрдорд┐рдд рдПрдХреНрд╕реЗрд╕ рдЯреЛрдХрди рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╕рдордп рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╡рд┐рд╡рд░рдг, рд╣рдореЗрдВ рдЕрдиреБрд░реЛрдз рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП & рдЧреБрдВрдЬрд╛рдЗрд╢ = ..., рдСрдлрд╝рд▓рд╛рдЗрди, рдЬрд┐рд╕рд╕реЗ рдЗрд╕ рдЯреЛрдХрди рдХреЛ рд▓рдЧрд╛рддрд╛рд░ рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рд╕реЗ рдЦреБрдж рдХреЛ рдмрдЪрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдзрд┐рдХ рдЧреЛрдкрдиреАрдпрддрд╛ рдХреЗ рд▓рд┐рдП, рдпрд╣ рд╕рдордп рд╕реАрдорд╛ рд╕рдорд╛рдкреНрддрд┐ рддрд┐рдерд┐ рдХреЗ рд╕рд╛рде рдЯреЛрдХрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдЦрдВрдбрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдкреЛрд╕реНрдЯ рдирд┐рд░реНрдорд╛рдг


 public ActionResult CrossPostFb(int id) { var post = repository.Posts.Where(p => p.ID == id).FirstOrDefault(); var fbSocial = currentUser.SocialGetByProvider("facebook"); if (post != null && post.UserID == currentUser.ID && fbSocial != null) { var postSocial = new Social.Post(); if (!string.IsNullOrWhiteSpace(post.PreviewUrl)) { //   postSocial.Preview = "http://" + HostName + post.PreviewUrl; } postSocial.Title = post.Title; postSocial.Teaser = post.Subtitle; //    postSocial.Link = "http://" + HostName + "/Post/" + post.ID.ToString(); //   var fbAccess = JsonConvert.DeserializeObject<FbAccessToken>(fbSocial.JsonResource); fbProvider.AccessToken = fbAccess.AccessToken; //  fbProvider.Publish(postSocial); repository.CrossPost(post, Post.CrossProvider.facebook); } return RedirectToAction("Index"); } 

рд╕реЗрдЯ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдПрдХ рд░рд┐рдХреЙрд░реНрдб рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЬрдм рдЖрдк рдПрдХ рд╕рдХреНрд░рд┐рдп рд▓рд┐рдВрдХ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдлреЗрд╕рдмреБрдХ рдЙрд╕ рдЫрд╡рд┐ рдХрд╛ рдЪрдпрди рдХрд░реЗрдЧрд╛ рдЬрд┐рд╕рдХреА рдЙрд╕реЗ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ

4. Vkontakte



Vkontakte рд╕рдмрд╕реЗ рдХрдард┐рди рдЗрдВрдЯрд░реИрдХреНрд╢рди рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред

рдЖрдЗрдП рдХреНрд░рдо рдореЗрдВ рд╢реБрд░реВ рдХрд░реЗрдВ: рдХреЗрд╡рд▓ рд╕реНрдЯреИрдВрдбрдЕрд▓реЛрди рдПрдкреНрд▓рд┐рдХреЗрд╢рди (рдФрд░ рд╡реЗрдм рдирд╣реАрдВ) рджреЛрдиреЛрдВ рдЕрдкрдиреА рджреАрд╡рд╛рд░ рдкрд░ рдФрд░ рд╕рдореВрд╣ рдХреА рджреАрд╡рд╛рд░ рдкрд░ рдкреЛрд╕реНрдЯ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП [x рдХреЗ рд╕рд╛рде рдЖрд╡реЗрджрди ( http://vkontakte.ru/editapp?act=create&site1 ) рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд░реЗрдВред ] рд╕реНрдЯреИрдВрдбрдЕрд▓реЛрди рдПрдкреНрд▓реАрдХреЗрд╢рдиред

рджреВрд╕рд░рд╛: рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рдореЗрдВ рдЪрд┐рддреНрд░ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЗрд╕реЗ рдкрд╣рд▓реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рддреАрд╕рд░рд╛: рдПрдХ рддрд╕реНрд╡реАрд░ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╕рд░реНрд╡рд░ рдкрддреЗ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдЬрд┐рд╕ рдкрд░ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдЪреМрдерд╛: рдореВрд▓ рдкреЛрд╕реНрдЯ рдХрд╛ рд▓рд┐рдВрдХ рдЕрдЯреИрдЪрдореЗрдВрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рд▓рд┐рдВрдХ рдЬреЛрдбрд╝рддреЗ рд╕рдордп рдХрд┐рд╕реА рдиреЛрдЯ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рд╣реИред

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрд╛рдХреА рд╕рдорд╛рди рд╣реИ, рддреЛ рдЪрд▓рд┐рдП рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЕрдзрд┐рдХрд╛рд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ:
 public ActionResult GetVkCode() { var vkSocial = currentUser.Socials.Where(p => p.Provider == "vkontakte").FirstOrDefault(); if (vkSocial != null) { return RedirectToAction("Index"); } else { return Redirect(vkProvider.Authorize("http://" + HostName + "/Social/SaveVkCode")); } } public string Authorize(string redirectTo) { return string.Format(AuthorizeUri, Config.AppKey, redirectTo); } 


рд╣рдорд╛рд░реЗ рдХреНрд░реЙрд╕-рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП, рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрд╣реБрдБрдЪ рд╕реНрддрд░реЛрдВ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рддреЗ рд╣реИрдВ: рдлрд╝реЛрдЯреЛ, рд╕рдореВрд╣, рджреАрд╡рд╛рд░, рдСрдлрд╝рд▓рд╛рдЗрдиред
рдпрд╛рдиреА рд╣рдо рдХрд┐рд╕реА рднреА рд╕рдордп рджреАрд╡рд╛рд░ рдкрд░ рд╕рдореВрд╣реЛрдВ рдХреЛ рддрд╕реНрд╡реАрд░реЗрдВ рдЕрдкрд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдкреНрд░рдХрд╛рд╢рди



рдПрдХ рд╕рдореВрд╣ рдХреА рджреАрд╡рд╛рд░ рдкрд░ рдкреЛрд╕реНрдЯ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рд╣рдореЗрдВ рдЗрд╕ рд╕рдореВрд╣ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ (group.getById)ред рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рд░реВрдк рд╕реЗ, рд╕рдореВрд╣ (рд╕рд╛рде рд╣реА рд╡реНрдпрдХреНрддрд┐рдЧрдд рдкреГрд╖реНрда) рдирдХрд╛рд░рд╛рддреНрдордХ рджрд┐рд╢рд╛ рдореЗрдВ рдЧрд┐рдиреЗ рдЬрд╛рддреЗ рд╣реИрдВред рдпрд╛рдиреА
рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЬреАрдЖрдИрдбреА тАЛтАЛрдорд╛рди рдХреЛ -1 рд╕реЗ рдЧреБрдгрд╛ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдлрд┐рд░ рд╣рдо рд╕рд░реНрд╡рд░ рдХреЛ рдлреЛрдЯреЛ рдЕрдкрд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддреЗ рд╣реИрдВ: photos.getWallUploadServer, not photos.getUploadServer - рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╡реЗ рд▓рдЧрднрдЧ рд╕рдорд╛рди рд╣реИрдВред

рдЕрдЧрд▓рд╛, рд╣рдо рдкреНрд░рд╛рдкреНрдд url рдЕрдиреБрд░реЛрдз рдкрд░ рдкреЛрд╕реНрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ VKontakte рд╕рд░реНрд╡рд░ рдкрд░ рдПрдХ рдлреЛрдЯреЛ рднреЗрдЬрддреЗ рд╣реИрдВред рдореИрдВрдиреЗ рдЕрдкрд▓реЛрдб рд╣реЗрд▓реНрдкрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА ( http://aspnetupload.com/ ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред

рд╕рд░реНрд╡рд░ рдкрд░ рдЕрдкрд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рдЗрд╕ рдЫрд╡рд┐ рдХреЛ рд╕рд╣реЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрдорд╛рдВрдб рднреЗрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ: photos.saveWallPhoto - рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдлреЛрдЯреЛ рдХреА рдЖрдИрдбреА рдорд┐рд▓рддреА рд╣реИред рдпрджрд┐ рдЖрдкрдиреЗ photos.getWallUploadServer рдХреЗ рдмрдЬрд╛рдп photos.getUploadServer рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рдлрд╝реЛрдЯреЛ рд╕рд╣реЗрдЬрд╛ рдирд╣реАрдВ рдЬрд╛рдПрдЧрд╛ред

рдФрд░ рдЕрдЧрд▓реЗ рдЪрд░рдг рдореЗрдВ рд╣рдо рд╕рдореВрд╣ / рдпрд╛ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдкреЗрдЬ (wall.post) рдХреА рджреАрд╡рд╛рд░ рдкрд░ рдПрдХ рддрд╕реНрд╡реАрд░ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдм рдХреБрдЫред

5. рдмрдВрд╕



рдЖрдк рдЗрд╕реЗ рдпрд╣рд╛рдБ рдЖрдЬрд╝рдорд╛ рд╕рдХрддреЗ рд╣реИрдВ: http://cocosanka.ru (рдкрдВрдЬреАрдХрд░рдг рдХреЗ рдмрд╛рдж, рдЖрдк рдПрдХ рдмреНрд▓реЙрдЧ рдкрд░ рдХреБрдЫ рдЕрд░реНрдерд╣реАрди рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рдкреЛрд╕реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)ред

рдпрд╣рд╛рдБ рд╕реНрд░реЛрдд рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ: https://bitbucket.org/chernikov/cocosanka2

рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ Json.net рд▓рд╛рдЗрдмреНрд░реЗрд░реА ( http://json.codeplex.com/ ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдкреНрд░рд╛рдкреНрдд рд╡рд╕реНрддреБрдУрдВ рдореЗрдВ рддрд╛рд░ рдорд┐рд▓рд╛рдПред

рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреБрдВрдЬрд┐рдпрд╛рдБ Web.config рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдЕрдкрдирд╛ рдкрдВрдЬреАрдХрд░рдг рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

Source: https://habr.com/ru/post/In131107/


All Articles