Giter VIP home page Giter VIP logo

rusoc's Introduction

rusoc GoDoc

Библиотека на Go (Golang) для работы с API российских социальных сетей (Одноклассники, ВКонтакте, Мой Мир). Работа со всеми платформами максимально унифицирована и по сути сводится к реализации структур двух типов для каждой социальной сети: приложения и клиента. Специфичные для каждой социальной сети вещи вынесены за рамки данной библиотеки.

Пример использования

Приложение для ВКонтакте, получающее токен и отправляющее уведомление клиенту.

package main

import (
	"fmt"
	"log"
	"errors"
	"net/url"
	"encoding/json"
	"github.com/HnH/rusoc"
)

// Приложение
type appVk struct {
	*rusoc.AppVk
	token string
}

// Обновляем access_token
func (self *appVk) updateToken() (err error) {
	var req = url.Values{}
	req.Add("client_id", self.GetKey())
	req.Add("client_secret", self.GetSecretKey())
	req.Add("grant_type", "client_credentials")

	var body []byte
	if body, _, err = rusoc.GetHTTP("https://oauth.vk.com/access_token?" + req.Encode()); err != nil {
		return
	}

	var rsp map[string]*json.RawMessage
	if err = json.Unmarshal(body, &rsp); err != nil {
		return
	}

	// Разбираем ответ сервера
	var ok bool
	if _, ok = rsp["error"]; ok {
		return errors.New("Не удалось получить access_token")
	}

	if _, ok = rsp["access_token"]; !ok {
		return errors.New("Не удалось получить access_token")
	}

	if err = json.Unmarshal(*rsp["access_token"], &self.token); err != nil {
		return
	}

	return nil
}

// Клиент
type clientVk struct {
	*rusoc.ClientVk
}

// Отправляем уведомление
func (self *clientVk) sendNotification(txt, token string) {
	var req = url.Values{}
	req.Add("client_id", self.GetApp().GetKey())
	req.Add("client_secret", self.GetApp().GetSecretKey())
	req.Add("user_id", fmt.Sprintf("%d", self.GetSocialId()))
	req.Add("message", txt)
	req.Add("access_token", token)

	self.CallMethod("secure.sendNotification", req)
}

func main() {
	var (
		app = appVk{
			AppVk: rusoc.NewAppVk(100500, "hash").(*rusoc.AppVk),
		}
		err error
	)

	if err = app.updateToken(); err != nil {
		log.Fatalf("Err: %+v:", err)
	}

	// В нормальном режиме эти данные передаются приложению социальной сетью
	var cReq = url.Values{}
	cReq.Set("viewer_id", "100500")
	cReq.Set("sid", "hash")
	cReq.Set("secret", "hash")
	cReq.Set("auth_key", "hash")

	var c rusoc.Client
	if c, err = app.NewClient(cReq); err != nil {
		log.Fatalf("Err: %+v:", err)
	}

	var client = clientVk{c.(*rusoc.ClientVk)}
	client.sendNotification("Проверка", app.token)
}

rusoc's People

Contributors

hnh avatar

Watchers

 avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.