Mail.ru api

Части и запчасти к проектам, дополнительное программное обеспечение.

Mail.ru api

Сообщение Nicloay 13 сен 2013, 15:10

Всем привет, делаю апи для майл ру, для облегченной комуникации по стандартному js
Если у кого есть интерес к этому скажите какие функции из этого списка http://api.mail.ru/docs/reference/js/ вам интересны, я добавлю их в демо сцену и опишу поподробнее.
Мне пока интересная лишь работа с альбомами, поэтому об этом можете не писать, сделаю и так.

Вероятно кто то уже делал что то похожее, сразу покажу как это будет работать..
Вот например функция по созданию нового альбома, из настроек нужно лишь указать секретный ключ, на странице подключить mail.ru js библиотеку, остальное необходимое создастся само
Синтаксис:
Используется csharp
        void createNewAblum(){
               
                Dictionary<string,object> paramsObject=new Dictionary<string,object>();
                paramsObject.Add("name",albumName);
               
                MRUController.instance.triggerMruByObjectMruListenerAndCallback(
                                "mailru.common.photos.createAlbum",
                                paramsObject,
                                "mailru.common.events.createAlbum",
                                delegate(object obj, Callback callback){
                                                Dictionary<string,object> result = obj as Dictionary<string,object>;
                                                string status = (string)result["status"];
                                                if (status.Equals("opened")){
                                                        Debug.Log("album window has opened");
                                                } else if (status.Equals("closed")){
                                                        Debug.Log("album window has closed without creation. Need to unsubscribe from event");
                                                        CallbackPool.instance.releasePermanentCallback(callback);
                                                } else if (status.Equals("createSuccess")){
                                                        Debug.Log("album created id = "+(string)result["aid"]+" Need to unsubscribe from event");
                                                        CallbackPool.instance.releasePermanentCallback(callback);
                                                        if(albumsMetadata!=null)
                                                                getAlbums();
                                                } else {
                                                        Debug.LogWarning("unknown status ["+status+"]");
                                                }
                       
                                               
                                });
        }
 


вся работа по комуникации осуществляется через делегаты, как видно в примере выше, можно анонимно задать делегат в который придет статус или результат. У мру 2 типа событий, одни возвращяют значение в функцию переданую при вызове, второе (как в примере выше), перед вызовом нужно подписаться на событие и вручную отписаться от него по завершению.


полный код класса по работе с альбомом (выгрузка альбомов, с картинками, и создание нового) пока черновой вариант поэтому немного лопши присутствует :).
Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;
using System.Collections.Generic;

struct AlbumMetadata{
        public string title;
        public string coverUrl;
        public Texture2D texture;
        public AlbumMetadata (string title, string coverUrl)
        {
                this.title = title;
                this.coverUrl = coverUrl;
                this.texture = new Texture2D(120,120);
        }

}

public class DemoAlbums : MonoBehaviour {
        Rect windowRect = new Rect(20, 140, 240, 380); 
        List<AlbumMetadata> albumsMetadata;
        string text="";
        Vector2 scrollPosition;
       
    void OnGUI() {
        windowRect = GUILayout.Window(20, windowRect, DoMyWindow, "Albums");
    }
       
        void DoMyWindow(int windowID) {
                text = GUILayout.TextArea(text);
                if (GUILayout.Button("create new"))
                        createNewAblum();
               
                if (GUILayout.Button("get albums"))
                        getAlbums();
                if (albumsMetadata!=null && albumsMetadata.Count>0){
                        scrollPosition = GUILayout.BeginScrollView(scrollPosition);
                        foreach(AlbumMetadata albumMeta in albumsMetadata){
                                GUILayout.BeginVertical();
                                        GUILayout.Label(albumMeta.title);                                      
                                        GUILayout.Box(albumMeta.texture, GUILayout.Height(120),GUILayout.Width(120));                                                                          
                                GUILayout.EndVertical();                               
                        }
                        GUILayout.EndScrollView();
                }              
                GUI.DragWindow(new Rect(0, 0, Screen.width, Screen.height));
    }
       
        void createNewAblum(){
               
                Dictionary<string,object> paramsObject=new Dictionary<string,object>();
                paramsObject.Add("name",text);
               
                MRUController.instance.triggerMruByObjectMruListenerAndCallback(
                                "mailru.common.photos.createAlbum",
                                paramsObject,
                                "mailru.common.events.createAlbum",
                                delegate(object obj, Callback callback){
                                                Dictionary<string,object> result = obj as Dictionary<string,object>;
                                                string status = (string)result["status"];
                                                if (status.Equals("opened")){
                                                        Debug.Log("album window has opened");
                                                } else if (status.Equals("closed")){
                                                        Debug.Log("album window has closed without creation. Need to unsubscribe from event");
                                                        CallbackPool.instance.releasePermanentCallback(callback);
                                                } else if (status.Equals("createSuccess")){
                                                        Debug.Log("album created id = "+(string)result["aid"]+" Need to unsubscribe from event");
                                                        CallbackPool.instance.releasePermanentCallback(callback);
                                                        if(albumsMetadata!=null)
                                                                getAlbums();
                                                } else {
                                                        Debug.LogWarning("unknown status ["+status+"]");
                                                }
                       
                                               
                                });
        }
       
        void getAlbums(){
                MRUController.instance.triggerMruByCallback("mailru.common.photos.getAlbums", delegate(object result, Callback callback) {                     
                        Debug.Log("im here ______" + Json.Serialize(result));
                               
                        List<object> albums = result as List<object>;
                        albumsMetadata = new List<AlbumMetadata>();
                        foreach (object item in albums) {
                                var album=item as Dictionary<string,object>;
                                albumsMetadata.Add(new AlbumMetadata((string)album["title"]    ,
                                                                                                        (string)album["cover_url"]));                                                          
                        }
                        downloadPictures();
                });
        }

        void downloadPictures (){
                if ( albumsMetadata.Count>0){
                        foreach (AlbumMetadata albumMeta in albumsMetadata){
                                StartCoroutine(downloadTextureToMetadata(albumMeta));          
                        }
                }
        }
       
        IEnumerator downloadTextureToMetadata(AlbumMetadata albumMeta){
                WWW www = new WWW(albumMeta.coverUrl);         
        yield return www;              
                http://www.LoadImageIntoTexture(albumMeta.texture);        
        }
       
}
 


ну а так выглядит результат.
Изображение

И да, если по коду что то непонятно, замечания приветствуются. постараюсь сделать более дружелюбно.

последнюю версию можно найти тут https://github.com/nicloay/unity2mailru/releases
Последний раз редактировалось Nicloay 06 окт 2013, 15:43, всего редактировалось 1 раз.
If you wish to make an apple pie from scratch, you must first invent the universe.(Carl Sagan, Cosmos)
| My Asset Store | coloring book | github | _wiki.unity3d.com | twitter | linkedin |
Аватара пользователя
Nicloay
Адепт
 
Сообщения: 1288
Зарегистрирован: 31 май 2012, 09:27
Откуда: Альпс
  • Сайт

Re: Mail.ru api

Сообщение 2rusbekov 13 сен 2013, 16:08

Почему в почемучке?
Still alive...
Аватара пользователя
2rusbekov
Адепт
 
Сообщения: 1409
Зарегистрирован: 06 апр 2012, 12:57
Откуда: Бишкек

Re: Mail.ru api

Сообщение Nicloay 13 сен 2013, 16:23

Пока еще рано определять где етому место. Ничего же еще не расшарено. А тут самый безобидный форум. Никому не помешает.


upd1: вот только закончил дебажить основной функционал.. загрузка фото через свой сервер в альбом майл ру
Синтаксис:
Используется csharp
IEnumerator takeScreenShot ()
        {
                yield return new WaitForEndOfFrame();
                Texture2D texture = getScreenTexture ();       
#if !UNITY_WEBPLAYER
                System.IO.File.WriteAllBytes("./123321test.png",texture.EncodeToPNG());        
#endif                         
                MRUController.instance.uploadTexture(texture, delegate(object incomeObj, Callback callback){
                        Dictionary<string,object> paramObj = new Dictionary<string, object>(){
                                {"url",(string)incomeObj},
                                {"aid",2},
                                {"set_as_cover",false},
                                {"name","testupload picture"},
                                {"tags","unity3d, js, png"},
                                {"theme","6"}                          
                        };
                       
                        MRUController.instance.callMailruByObjectMailruListenerAndCallback(
                                "mailru.common.photos.upload",paramObj,
                                "mailru.common.events.upload", delegate(object result, Callback mruCallback){
                                        Dictionary<string,object> resultObj=result as Dictionary<string,object>;                                       
                                        string status = (string)resultObj["status"];
                                        if (status.Equals("uploadSuccess")){
                                                Debug2.LogDebug("status ok");
                                                string imgFullPath=(string)(resultObj["originalProps"] as Dictionary<string,object>)["url"];
                                                MRUController.instance.removeTextureFromServer(imgFullPath);
                                                CallbackPool.instance.releasePermanentCallback(mruCallback);   
                                        } else if (status.Equals("closed")){
                                                Debug2.LogDebug("user closed window");
                                                string imgFullPath=(string)(resultObj["originalProps"] as Dictionary<string,object>)["url"];
                                                MRUController.instance.removeTextureFromServer(imgFullPath);
                                                CallbackPool.instance.releasePermanentCallback(mruCallback);
                                        } else if (!status.Equals("opened")){
                                                Debug2.LogError("unkonwn status +"+status);
                                        }
                                        Debug2.LogDebug("current status ="+status);
                                       
                                }
                        );
                       
                });
               
        }
 
If you wish to make an apple pie from scratch, you must first invent the universe.(Carl Sagan, Cosmos)
| My Asset Store | coloring book | github | _wiki.unity3d.com | twitter | linkedin |
Аватара пользователя
Nicloay
Адепт
 
Сообщения: 1288
Зарегистрирован: 31 май 2012, 09:27
Откуда: Альпс
  • Сайт

Re: Mail.ru api

Сообщение Nicloay 19 сен 2013, 08:57

выложил пока бета версию тут https://github.com/nicloay/unity2mailru , также доабвил немного описания. попозже планирую дописать нормальный хелп.

скачать 1ю бету можно от сюда https://github.com/nicloay/unity2mailru ... itypackage
If you wish to make an apple pie from scratch, you must first invent the universe.(Carl Sagan, Cosmos)
| My Asset Store | coloring book | github | _wiki.unity3d.com | twitter | linkedin |
Аватара пользователя
Nicloay
Адепт
 
Сообщения: 1288
Зарегистрирован: 31 май 2012, 09:27
Откуда: Альпс
  • Сайт

Re: Mail.ru api

Сообщение proton667 05 окт 2013, 13:01

Спасибо большое.
Хочу добавить приложение в маил ру. Я исходник ваш еще не смотрел, такие вопросы:

1. Есть ли в вашем исходнике пример получения ID mai ru, password mail ru (наподобие контактовского), запрос имени и фамилии пользователя? (очень похожа система приложений маил ру на контактовскую)

2. Хотелось бы конечно попасть в каталог маил ру. Опыта работы там еще нет. Понял одно - чтобы пройти модерацию на каталог нужно обязательное использование mail ru API в приложении. Затем понял еще одну вешь - чтобы использовать платежи в игре нужно обязательно рега на ОК песочнице и заключение договора с использованием доументов по ЧП. У меня ситуация следующая -мне надо значит использовать API mail ru, буду брать имя и фамилию для ников, но не хочу делать монетизацию - не хочу возиться с договором. Вопрос такой - можно ли попасть в каталог (теоретически), если в игре не будет монетизации, а только простенькое использование API для получения ID и фамилии. Короче попасть без заключения договора с ОК, где надо ЧП.

3. Не подскажете где там в настройках пункт, где подают приложение на модерацию?

4. Ваше приложение Colorus находиться ли в каталоге маил ру? Насколько я знаю монетизации там нет.
Скрытый текст:
но вино будет
.
proton667
UNIт
 
Сообщения: 144
Зарегистрирован: 20 июл 2013, 12:40

Re: Mail.ru api

Сообщение Nicloay 05 окт 2013, 13:25

1. По поводу использования, кидай ссылки на методы http://api.mail.ru/docs/reference/js/ от сюда я покажу как использовать.
я так пологаю что поля из первого вопроса, это те поля что возвращаются методом
Код: Выделить всё
mailru.app.init(private_key)

псевдокод (если не получится напиши, создам класс и отлажу)
Синтаксис:
Используется csharp
MRUController.instance.onApiReady += onApiReadyListener; //можешь сдесь засунуть делегат
void onApiReadyListener(object obj){ //obj  это Json  так что работать с ним можешь как с json-ом  в с другими методами
     Debgu2.LogDebug("  parameters in json = "+Json.Serialize(obj)); //это чтоб параметры отобразить в виде json, Debug2.LogDebug  напечатает это в стандартный лог и в javascript консоль браузера
     stiring somePropsValue= (string)(obj as dictionary)["YOUR_PROP_NAME"];
}
MRUController.instance.initializeMailRuApi();
 


2. По поводу католога, я не совсем понял (colorus до сих пор только в разработке), подал заявку в начале прошлой недели, вот вчера только (через 1.5 недели) написали что мне нужно создать компанию и принять оферту и дали ссылку на apiok.ru, я не совсем понял, что от меня хотят, написал им обратно письмо с вопросом, какую компанию они хотят (если ИП и т.п., то мне как безработному бомжу, пока нафиг не сдалось платить налоги, чтоб бесплатно на ихнем сайте показывать мое приложение), если рекламную компанию (target.mail.ru) тогда можно. Вобщем как будут новости я отпишу, но не думаю что в этот раз они быстрее чем раньше ответят. (в моем случае тоже кстати никакой монетизации нет, основное ради удовлетворения ЧСВ ну и плюс мизерная реклама при продвижении на мобильных (хотя я даже в этом не уверен))

3. Настройки Приложения -> публикация
Изображение

4. как писал выше - не находится.


п.с. еще раз для прояснения, что никакие mail.ru методы не переписаны обращение к любым ихним методом идет через функцию с парамтрами один из которых string имя функции, 2й callback и еще могут быть дополнительные.

п.п.с. В отличии от вконтакта, у майл ру наверняка есть своя политика насчет приложений, что им бесплатные без монетизации не нужны, ибо прибыли с них никакой кроме мизерного показа рекламы. обвинять тут их в чем то сложно :), но это конечно доставляет, если учесть что у вконтакта, или фейсбука никаких проблем с публикацией(не в каталог) вообще нет
If you wish to make an apple pie from scratch, you must first invent the universe.(Carl Sagan, Cosmos)
| My Asset Store | coloring book | github | _wiki.unity3d.com | twitter | linkedin |
Аватара пользователя
Nicloay
Адепт
 
Сообщения: 1288
Зарегистрирован: 31 май 2012, 09:27
Откуда: Альпс
  • Сайт

Re: Mail.ru api

Сообщение proton667 05 окт 2013, 13:38

написали что мне нужно создать компанию и принять оферту и дали ссылку на apiok.ru,

Вот так. Они вынуждают подписывать с ними договор для публикации в каталоге. Я был на ОК - ну как бы там тоже опубликоваться и смотрел их условия - маил ру они направляют на ОК. Ив от на ОК невозможно опубликоваться без ЧП. ИП там даже не надо. Я читал там список всех документов. Там надо бумагу о том что ты директор ЧП, потом что ты просто ЧП и пару справок из налоговой кажись. Потом шлешь им один документ заверенный у нотариуса по почте, а остлальных бумаг что я говорил выше, отправляешь скриншоты по емаил. Но мне это не улыбает че то. Хотел на маил ру обойти это оформление.
А компания это в разделе билинг - это для создания монетизации игры. То есть скорее всего они без оформления документов не дадут приложению в каталог пройти.

По первому вопросу - по твоей ссылке такого нет что мне надо. Но мне надо это

http://api.mail.ru/docs/reference/js/users-getinfo/

А насчет ID я понял это тут http://api.mail.ru/docs/guides/jsapi/ очень похоже на контакт. Вобще на самом деле мне щас это получение имени юсера тогда не очень надо. Потому что возникли сомнения что в каталог можно просто так попасть. Тем более что все можно сделать просто на веб странице. Так что не нагружай себя в случае чего.
Скрытый текст:
но вино будет
.
proton667
UNIт
 
Сообщения: 144
Зарегистрирован: 20 июл 2013, 12:40

Re: Mail.ru api

Сообщение Diab10 05 окт 2013, 14:10

Я в ОК писал, они сказали, что нужно быть хотя бы ИП
Аватара пользователя
Diab10
Адепт
 
Сообщения: 3401
Зарегистрирован: 17 мар 2011, 20:42
Откуда: 123 RUS
Skype: diab1023

Re: Mail.ru api

Сообщение Nicloay 05 окт 2013, 14:13

Ту функцию использовать. Как два пальца об асфальт буду дома напишу пример.
If you wish to make an apple pie from scratch, you must first invent the universe.(Carl Sagan, Cosmos)
| My Asset Store | coloring book | github | _wiki.unity3d.com | twitter | linkedin |
Аватара пользователя
Nicloay
Адепт
 
Сообщения: 1288
Зарегистрирован: 31 май 2012, 09:27
Откуда: Альпс
  • Сайт

Re: Mail.ru api

Сообщение proton667 05 окт 2013, 14:17

to Nicloay спасибо.
Я в ОК писал, они сказали, что нужно быть хотя бы ИП


Но я читал правила для размещения игры в ОК там четко сказано что ЧП также может заключить с ними договор. Ну вобщем не юр лицо и без упрощенки может. А им подача справки из налоговой надо всего 1 раз в год - то есть на ОК.
Последний раз редактировалось proton667 05 окт 2013, 14:22, всего редактировалось 1 раз.
Скрытый текст:
но вино будет
.
proton667
UNIт
 
Сообщения: 144
Зарегистрирован: 20 июл 2013, 12:40

Re: Mail.ru api

Сообщение Diab10 05 окт 2013, 14:19

proton667 писал(а):
Я в ОК писал, они сказали, что нужно быть хотя бы ИП


Но я читал правила для размещения игры в ОК там четко сказано что ЧП также может заключить с ними договор.


Ну ЧП и ИП вроде одно и то же? Частный(Индивидуальный) предприниматель
Аватара пользователя
Diab10
Адепт
 
Сообщения: 3401
Зарегистрирован: 17 мар 2011, 20:42
Откуда: 123 RUS
Skype: diab1023

Re: Mail.ru api

Сообщение proton667 05 окт 2013, 14:25

Да вроде одно и тоже. ИП типа может работать по упрощенке, а ЧП нет. ИП типа выше. Но я упрощенку имел ввиду. Потому что если ты например за какой то месяц подашь дохода ноль - но тебе за этот месяц все равно надо заплатить налог как обычно по упрощенке. Короче на упрощенке надо платить каждый месяц в любом случае. А ЧП подал деклараци что ноль доходов и заплатил ноль ПДВ. Конечно ИП тоже не обязательно делать упрощенку. Просто ЧП упрощенку не сможет сделать.
Скрытый текст:
но вино будет
.
proton667
UNIт
 
Сообщения: 144
Зарегистрирован: 20 июл 2013, 12:40

Re: Mail.ru api

Сообщение Diab10 05 окт 2013, 14:29

proton667 писал(а):Да вроде одно и тоже. ИП типа может работать по упрощенке, а ЧП нет. ИП типа выше. Но я упрощенку имел ввиду. Потому что если ты например за какой то месяц подашь дохода ноль - но тебе за этот месяц все равно надо заплатить налог как обычно по упрощенке. Короче на упрощенке надо платить каждый месяц в любом случае. А ЧП подал деклараци что ноль доходов и заплатил ноль ПДВ. Конечно ИП тоже не обязательно делать упрощенку. Просто ЧП упрощенку не сможет сделать.


А на данный вид заработка есть упрощёнка?
В каждом регионе свои упрощёнки
Аватара пользователя
Diab10
Адепт
 
Сообщения: 3401
Зарегистрирован: 17 мар 2011, 20:42
Откуда: 123 RUS
Skype: diab1023

Re: Mail.ru api

Сообщение proton667 05 окт 2013, 14:39

Какой вид заработка упрощенка? Упрощенное обложение налогом -скоко там щас не знаю - то есть платишь не 18 процентов а 50 баксов кажись и пофиг сколько у тебя дохода хоть милмион. Если ИП оформлен на 5 видов деятельности - пофиг каким образом он зарабатывает. Налог считается с общего дохода ИП в месяц(имхо)
Скрытый текст:
но вино будет
.
proton667
UNIт
 
Сообщения: 144
Зарегистрирован: 20 июл 2013, 12:40

Re: Mail.ru api

Сообщение Diab10 05 окт 2013, 15:01

proton667 писал(а):Какой вид заработка упрощенка? Упрощенное обложение налогом -скоко там щас не знаю - то есть платишь не 18 процентов а 50 баксов кажись и пофиг сколько у тебя дохода хоть милмион. Если ИП оформлен на 5 видов деятельности - пофиг каким образом он зарабатывает. Налог считается с общего дохода ИП в месяц(имхо)


Тьфу блин, я с ЕНВД спутал.

То что вы описали, это ЕНВД вроде.

Упрощёнка это вот:
единый налог в размере 6 процентов с дохода или 15 процентов с дохода, уменьшенного на величину расходов
Аватара пользователя
Diab10
Адепт
 
Сообщения: 3401
Зарегистрирован: 17 мар 2011, 20:42
Откуда: 123 RUS
Skype: diab1023

След.

Вернуться в Компоненты (Копилка)

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3