package main
import (
"encoding/json"
"log"
)
type RawResponse struct {
Response []json.RawMessage `json:"response"`
}
type Response struct {
Id int `json:"id"`
FromId int `json:"from_id"`
ToId int `json:"to_id"`
Date int `json:"date"`
PostType string `json:"post_type"`
Text string `json:"text"`
SignerId int `json:"signer_id"`
IsPinned int8 `json:"is_pinned"`
Attachment Attachment `json:"attachment"`
Attachments []Attachment `json:"attachments"`
}
type Attachment struct {
Type string `json:"type"`
Photo *Photo `json:"photo"`
Link *Link `json:"link"`
}
type Photo struct {
Pid int `json:"pid"`
Aid int `json:"aid"`
OwnerId int `json:"owner_id"`
UserId int `json:"user_id"`
Src string `json:"src"`
SrcBig string `json:"src_big"`
SrcSmall string `json:"src_small"`
SrcXbig string `json:"src_xbig"`
SrcXxbig string `json:"src_xxbig"`
Width int `json:"width"`
Height int `json:"height"`
Text string `json:"text"`
Created int `json:"created"`
Access_key string `json:"access_key"`
}
type Link struct {
Url string `json:"url"`
Title string `json:"title"`
Description string `json:"description"`
ImageSrc string `json:"image_src"`
ImageBig string `json:"image_big"`
}
func main() {
raw := []byte(`{"response":[2468,{"id":5513,"from_id":-58014516,"to_id":-58014516,"date":1453516206,"post_type":"post","text":"Мир вам и ближним вашим!<br><br>Оправдываться - грех. Прп. авва Исайя поучал: \"Венец добродетелей - любовь; венец страстей - оправдание грехов своих\". Вместо оправданий будем говорить - \"прости\".<br><br>Братия Троицкой Селенгинской обители","signer_id":235194773,"is_pinned":1,"attachment":{"type":"photo","photo":{"pid":404037784,"aid":-7,"owner_id":-58014516,"user_id":100,"src":"http:\/\/cs631329.vk.me\/v631329773\/eefe\/8qL1uNcH-Kg.jpg","src_big":"http:\/\/cs631329.vk.me\/v631329773\/eeff\/IvmP9O8aFLc.jpg","src_small":"http:\/\/cs631329.vk.me\/v631329773\/eefd\/B6ADu5ntll0.jpg","src_xbig":"http:\/\/cs631329.vk.me\/v631329773\/ef00\/bfMgaBRpBcI.jpg","src_xxbig":"http:\/\/cs631329.vk.me\/v631329773\/ef01\/qcrVhaq--Ic.jpg","width":1000,"height":666,"text":"","created":1453470652,"access_key":"053e6253631cae5038"}},"attachments":[{"type":"photo","photo":{"pid":404037784,"aid":-7,"owner_id":-58014516,"user_id":100,"src":"http:\/\/cs631329.vk.me\/v631329773\/eefe\/8qL1uNcH-Kg.jpg","src_big":"http:\/\/cs631329.vk.me\/v631329773\/eeff\/IvmP9O8aFLc.jpg","src_small":"http:\/\/cs631329.vk.me\/v631329773\/eefd\/B6ADu5ntll0.jpg","src_xbig":"http:\/\/cs631329.vk.me\/v631329773\/ef00\/bfMgaBRpBcI.jpg","src_xxbig":"http:\/\/cs631329.vk.me\/v631329773\/ef01\/qcrVhaq--Ic.jpg","width":1000,"height":666,"text":"","created":1453470652,"access_key":"053e6253631cae5038"}},{"type":"link","link":{"url":"http:\/\/selenginskii-monastery.cerkov.ru\/sms-rassylka-monastyrya-pouchenie-dnya\/pouchenie-dnya-373\/","title":" » Поучение дня","description":"","image_src":"http:\/\/cs631418.vk.me\/v631418773\/c773\/OMWEVcI7cno.jpg","image_big":"http:\/\/cs631418.vk.me\/v631418773\/c775\/PbCrn5A8iuA.jpg"}}],"comments":{"count":0},"likes":{"count":77},"reposts":{"count":9}}]}`)
var raw_res RawResponse
err := json.Unmarshal(raw, &raw_res)
if err != nil {
log.Fatal("Error parsing json: ", err)
}
var res Response
err = json.Unmarshal(raw_res.Response[1], &res)
if err != nil {
log.Fatal("Error parsing json: ", err)
}
log.Printf("%+v", res)
log.Println(res.Attachments[0].Photo.Pid)
log.Println(res.Attachments[1].Link.Title)
}
sudo service supervisor start
или
sudo supervisord
[program:ОТОБРАЖАЕМОЕ_ИМЯ]
command = КОМАНДА_ДЛЯ_ЗАПУСКА (например python ИМЯ_СКРИПТА)
autorestart = true # автостарт при запуске супервизора
stderr_logfile = /var/log/ИМЯ_ЛОГФАЙЛА.err.log # тут перенаправляем stderr в файл
stdout_logfile = /dev/null # тут глушим весь вывод со stdout
supervisorctl reread
supervisorctl ОТОБРАЖАЕМОЕ_ИМЯ start
INSERT INTO users (user_id, user_name, user_adddate) VALUES ('', 'user', '1404721764')
<?php
$insert_sql = sprintf("
INSERT INTO users (user_id, user_name, user_adddate)
VALUES (%s, '%s', %d)
", 'NULL', $user_name, time());
?>
<?php
/*
* Инициализация. Эту строку нужно писать там,
* где вы делаете mysql_connect. А сам вызов mysql_connect
* и прочего сопутствующего можно удалить.
*/
$db = new PDO('mysql:dbname=testdb;host=127.0.0.1', 'dbuser', 'dbpass');
// . . .
/*
* Вставляемые переменные заменяются знаками вопроса. Никаких кавычек
* тут ставить не нужно — PDO сам поставит их в нужном месте.
*/
$sth = $db->prepare('INSERT INTO `users` (user_id, user_name, user_adddate) VALUES (NULL, ?, ?)');
/*
* Передача значений в запрос происходит в виде массива;
* порядок элементов в массиве имеет значение.
* $user_name — первый элемент, значит его значение подставится
* на месте первого знака вопроса. time() — второй элемент, значит
* его результат подставится вместо второго «?»
*/
$sth->execute( array($user_name, time()) );
?>
<?php
// . . .
$sth = $db->prepare('INSERT INTO `users` (user_id, user_name, user_adddate) VALUES (?, ?, ?)');
/*
* Важный момент: нельзя писать
* $sth->bindParam(1, NULL, PDO::PARAM_NULL);
* Перед тем, как биндить NULL, его нужно присвоить переменной
* и биндить уже эту переменную. Иначе будут выскакивать ошибки.
*/
$null_value = NULL;
$sth->bindParam(1, $null_value, PDO::PARAM_NULL);
$sth->bindParam(2, $user_name, PDO::PARAM_STR);
$sth->bindParam(3, time(), PDO::PARAM_INT);
/*
* Так как параметры уже переданы с помощью bindParam-ов,
* в вызов execute не нужно ничего добавлять.
*/
$sth->execute();
?>
<?php
$insert_sql = sprintf("
INSERT INTO users (user_id, user_name, user_adddate)
VALUES (%s, '%s', %d)
", 'NULL', $user_name, NOW());
?>
<?php
$insert_sql = sprintf("
INSERT INTO users (user_id, user_name, user_adddate)
VALUES (NULL, '%s', NOW())
", $user_name);
?>
1) Пользователь выбирает вход через соц. сеть.
2) Происходит обращение к странице авторизации в этой соц. сети, если человек еще не авторизовывался там. После ввода данных, а если он ранее авторизовывался, происходит запрос на разрешение использования его данных.
3) Если человек отказывается, то на этом конец. Если дает согласие, то выполняется перенаправление на указанную в настройках Oauth страницу сайта.
4) У каждого пользователя в соц. сетях есть свой уникальный идентификатор, который можно запрашивать. Для своей таблицы 'users' нужно добавить пару дополнительных полей (например, вот такие): auth_via (enum('native, 'vk', 'mailru', '...')) - для обозначения типа регистрации пользователя, и social_id - здесь будет храниться уникальный идентификатор в соц. сети. Если нужно хранить какие-то специфические данные этого пользователя из соц. сетей, то можно создать доп. поля для этих данных.
5) После того, как пользователь дал разрешение на использование его данных, необходимо запросить нужные данные от соц. сети, в т.ч. и идентификатор пользователя в соц. сети. Вот здесь и начинается невидимый процесс регистрации. Нужно проверить есть ли в БД пользователь с таким social_id, если нет, то вставляем social_id, данные пользователя из соц. сети, по необходимости, в БД. Все, пользователь зарегистрирован.
Если же данные о пользователе есть, то необходимо запросить актуальные данные из соц. сети, сравнить их с теми, что в базе и если они изменились, то обновить их и в своей базе данных, если нет, то просто переходим к следующему шагу.
6) Создается сессия с данными пользователя.
'AND WHERE `auth_via`="native"'