1 #include "nlib_include.h"
17 NicoMyListItem_P pitem;
20 }NicoMyListItemContainer,*NicoMyListItemContainer_P;
23 ///
\83}
\83C
\83\8a\83X
\83g
\88ê
\97\97\8eæ
\93¾
\8b¤
\92Ê
\8f\88\97\9d
25 static NLIB_RESULT NicoMyList_getList(NicoVideoAuth_P pAuth,LPCWSTR objectName,NicoMyListCallBack callback);
27 static NicoMyListItem_P NicoMyListItem_new();
29 static VOID NicoMyListItem_delete(NicoMyListItem_P *pitem);
31 static JSONVoid myListItemStructEventHandler(JSONVoid *option,JSONUInt thisHierarchy,JSONUInt valueType,JSONChar_P name);
33 static JSONVoid myListItemDataEventHandler(JSONVoid *option,JSONUInt thisHierarchy,JSONUInt valueType,JSONChar_P name,JSONParameter param);
35 static JSONVoid myListItemDataEndEventHandler(JSONVoid *option,JSONUInt thisHierarchy,JSONUInt valueType,JSONChar_P param);
38 ///
\82Æ
\82è
\82 \82¦
\82¸
\83}
\83C
\83\8a\83X
\83g
\88ê
\97\97\8eæ
\93¾
40 NLIB_RESULT NicoMyList_getDefList(NicoVideoAuth_P pAuth,NicoMyListCallBack callback){
42 NLIB_RESULT rslt = NLIB_ERR_OK;
44 rslt = NicoMyList_getList(pAuth,L"api/deflist/list",callback);
57 //
\83v
\83\89\83C
\83x
\81[
\83g
\8aÖ
\90\94
60 static NLIB_RESULT NicoMyList_getList(NicoVideoAuth_P pAuth,LPCWSTR objectName,NicoMyListCallBack callback){
62 //
\95Ï
\90\94\90é
\8c¾
\81A
\8f\89\8aú
\89»
63 NLIB_RESULT rslt = NLIB_ERR_OK;
64 HINTERNET hNicoVideoSession = NULL;
65 HINTERNET hGetMyList = NULL;
66 WCHAR sendBuffer[LENGTH_512] = {L"Cookie: "};
68 DWORD statusCodeSize = sizeof(statusCode);
70 LPSTR readBuffer = NULL;
71 JSONParser_P jsonParser = NULL;
72 NicoMyListItemContainer itemContainer;
74 ZeroMemory(&itemContainer,sizeof(itemContainer));
76 wcscat(sendBuffer,pAuth->userSession);
77 hNicoVideoSession = WinHttpConnect(hHttpSession,WWW_NICO_VIDEO_DOMEINNAME,INTERNET_DEFAULT_HTTP_PORT,0);
79 hGetMyList = WinHttpOpenRequest(hNicoVideoSession,L"GET",objectName,L"1.1",(LPCWSTR)WINHTTP_NO_REFERER,(LPCWSTR*)WINHTTP_DEFAULT_ACCEPT_TYPES,0);
82 if(WinHttpSendRequest(hGetMyList,sendBuffer,-1,WINHTTP_NO_REQUEST_DATA,0,0,0) == FALSE){
88 readBuffer = (LPSTR)malloc(LENGTH_65536 * 30);
90 jsonParser = JSONParser_new();
92 JSONParser_setEventHandler(jsonParser,myListItemStructEventHandler,myListItemDataEventHandler,myListItemDataEndEventHandler);
94 itemContainer.pitem = NicoMyListItem_new();
96 if(WinHttpReceiveResponse(hGetMyList,NULL) == FALSE){
103 if (WinHttpQueryHeaders(hGetMyList,WINHTTP_QUERY_STATUS_CODE | WINHTTP_QUERY_FLAG_NUMBER,WINHTTP_HEADER_NAME_BY_INDEX,&statusCode,&statusCodeSize,WINHTTP_NO_HEADER_INDEX) == FALSE){
107 if (HTTP_STATUS_OK != statusCode){
111 if(ReadHttpBody(hGetMyList,(LPBYTE)readBuffer,CHUNKMEMORY_MAXSIZE,&readSize) == FALSE){
116 readBuffer[readSize] = '\0';
118 if(JSONParser_Parse(jsonParser,readBuffer,JSON_ENCODE_UTF8,&itemContainer) != JSON_ERR_OK){
128 JSONParser_delete(&jsonParser);
129 NicoMyListItem_delete(&itemContainer.pitem);
130 WinHttpCloseHandle(hNicoVideoSession);
131 WinHttpCloseHandle(hGetMyList);
136 rslt = NLIB_ERR_FAILED_NETWORK;
139 rslt = NLIB_ERR_JSON_PARSE;
143 static NicoMyListItem_P NicoMyListItem_new(){
145 NicoMyListItem_P self = (NicoMyListItem_P)calloc(1,sizeof(*self));
150 static VOID NicoMyListItem_delete(NicoMyListItem_P *pitem){
159 static JSONVoid myListItemStructEventHandler(JSONVoid *option,JSONUInt thisHierarchy,JSONUInt valueType,JSONChar_P name){
161 NicoMyListHierarchy nord = NicoMyList_Root;
163 NicoMyListItemContainer_P self = (NicoMyListItemContainer_P)option;
167 case MAKENORD(NicoMyList_Root):
169 if(thisHierarchy == JSONTypeRoot && valueType == JSONTypeObject){
171 nord = NicoMyList_mylist;
176 case MAKENORD1(NicoMyList_Root,NicoMyList_mylist):
178 if(thisHierarchy == JSONTypeObject && valueType == JSONTypeArray && wcscmp(name,L"mylistitem") == 0){
180 nord = NicoMyList_mylistitem;
186 case MAKENORD2(NicoMyList_Root,NicoMyList_mylist,NicoMyList_mylistitem):
188 if(thisHierarchy == JSONTypeArray && valueType == JSONTypeObject){
190 nord = NicoMyList_item;
196 case MAKENORD3(NicoMyList_Root,NicoMyList_mylist,NicoMyList_mylistitem,NicoMyList_item):
198 if(thisHierarchy == JSONTypeObject && valueType == JSONTypeObject && wcscmp(name,L"item_data") == 0){
200 nord = NicoMyList_item_data;
208 self->nord = MAKENORD1(self->nord,nord);
215 static JSONVoid myListItemDataEventHandler(JSONVoid *option,JSONUInt thisHierarchy,JSONUInt valueType,JSONChar_P name,JSONParameter param){
220 case JSONTypeDecimal:
222 dumpln(TEXT("name:[%s]:param[%s]"),name,(LPCWSTR)param);
228 dumpln(TEXT("name:[%s]:param[%s]"),name,(LPCWSTR)param);
235 static JSONVoid myListItemDataEndEventHandler(JSONVoid *option,JSONUInt thisHierarchy,JSONUInt valueType,JSONChar_P name){
237 UPNORD(((NicoMyListItemContainer_P)option)->nord);