17. 12. 1.

C#으로 네이트온 팀룸 OPEN API를 이용하기(알림)

네이트온 팀룸 api를 c#으로 이용하기
using System;
using System.IO;
using System.Net;
using System.Text;

namespace TeamRoomTest
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                // Webhook URL
                string webHookUrl = "https://teamroom.nate.com/api/webhook/6fc73b8a/MDNieeQGWvEGnqQXO4wugRra";
                // Send Message
                string sendMessage = "테스트입니당~";
                ASCIIEncoding encoding = new ASCIIEncoding();
                byte[] data = encoding.GetBytes(string.Format("content={0}", System.Web.HttpUtility.UrlEncode(sendMessage)));
                HttpWebRequest req = (HttpWebRequest)WebRequest.Create(webHookUrl);
                req.Timeout = 5000;
                req.Method = "POST";
                req.ContentType = "application/x-www-form-urlencoded";
                req.ContentLength = data.Length;
                Stream dataStream = req.GetRequestStream();
                dataStream.Write(data, 0, data.Length);
                dataStream.Close();
                req.GetResponse();
            }
            catch(Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }
        }
    }
}

※ Webhook url 은 네이트온의 팀룸을 열면 팀룸메뉴 -> 오픈 API 이용하기 -> 새로 연결하기 또는 편집으로 들어가면 확인 가능하다.

17. 1. 5.

Classic ASP 인스타그램(Instagram) API 로그인

login.asp 파일
<script type="text/javascript">
function instagramlogin(){
 var openUrl = "https://api.instagram.com/oauth/authorize/";
 var client_id = "97e52e1da4064299b2a1ba87db3c4167";
 var return_url = "http://www.mysite.com/login/instagram.asp";
 var DataVal = "";
 DataVal += "client_id="+escape(client_id).replace(/\+/gi, '%2B');;
 DataVal += "&redirect_uri="+escape(return_url).replace(/\+/gi, '%2B');
 DataVal += "&response_type=code";
 var instagramLogin = window.open(openUrl+"?"+DataVal,"instagramLogin","width=450,height=300,scrollbars=no");
 instagramLogin.focus();
}
</script>

<a onclick="instagramlogin();">인스타그램(Instagram) 로그인</a>

instagram.asp 파일
<!-- #include file = "aspJSON1.17.asp"--><%

 return_code = request.QueryString("code")

 returnURL = server.URLEncode("http://www.mysite.com/login/instagram.asp")
 client_id = "97e52e1da4064299b2a1ba87db3c4167"
 client_secret = "db0bcf2b60124ff5a1234298f80a8ca8"

 Set httpObj = Server.CreateObject("WinHttp.WinHttpRequest.5.1")
 httpObj.open "POST" , "https://api.instagram.com/oauth/access_token", False
 httpObj.SetRequestHeader "Content-Type", "application/x-www-form-urlencoded"
 httpObj.Send "grant_type=authorization_code&client_id=" & client_id & "&client_secret=" & client_secret & "&redirect_uri=" & returnURL & "&code=" & return_code
 httpObj.WaitForResponse

 If httpObj.Status = "200" Then
  JsonText = httpObj.ResponseText
 Else
  JsonText = null
 End If 

 Set oJSON = New aspJSON
 oJSON.loadJSON(JsonText)

 If oJSON.data("error") = "" then
  UsrId = oJSON.data("user").item("id")
  UserNn = oJSON.data("user").item("username")

  response.write(UsrId & " 님 안녕하세요")
 End If
%>

참고
aspJSON1.17.asp 파일
<%
'Februari 2014 - Version 1.17 by Gerrit van Kuipers
Class aspJSON
 Public data
 Private p_JSONstring
 private aj_in_string, aj_in_escape, aj_i_tmp, aj_char_tmp, aj_s_tmp, aj_line_tmp, aj_line, aj_lines, aj_currentlevel, aj_currentkey, aj_currentvalue, aj_newlabel, aj_XmlHttp, aj_RegExp, aj_colonfound

 Private Sub Class_Initialize()
  Set data = Collection()

     Set aj_RegExp = new regexp
     aj_RegExp.Pattern = "\s{0,}(\S{1}[\s,\S]*\S{1})\s{0,}"
     aj_RegExp.Global = False
     aj_RegExp.IgnoreCase = True
     aj_RegExp.Multiline = True
 End Sub

 Private Sub Class_Terminate()
  Set data = Nothing
     Set aj_RegExp = Nothing
 End Sub

 Public Sub loadJSON(inputsource)
  inputsource = aj_MultilineTrim(inputsource)
  If Len(inputsource) = 0 Then Err.Raise 1, "loadJSON Error", "No data to load."
  
  select case Left(inputsource, 1)
   case "{", "["
   case else
    Set aj_XmlHttp = Server.CreateObject("Msxml2.ServerXMLHTTP")
    aj_XmlHttp.open "GET", inputsource, False
    aj_XmlHttp.setRequestHeader "Content-Type", "text/json"
    aj_XmlHttp.setRequestHeader "CharSet", "UTF-8"
    aj_XmlHttp.Send
    inputsource = aj_XmlHttp.responseText
    set aj_XmlHttp = Nothing
  end select

  p_JSONstring = CleanUpJSONstring(inputsource)
  aj_lines = Split(p_JSONstring, Chr(13) & Chr(10))

  Dim level(99)
  aj_currentlevel = 1
  Set level(aj_currentlevel) = data
  For Each aj_line In aj_lines
   aj_currentkey = ""
   aj_currentvalue = ""
   If Instr(aj_line, ":") > 0 Then
    aj_in_string = False
    aj_in_escape = False
    aj_colonfound = False
    For aj_i_tmp = 1 To Len(aj_line)
     If aj_in_escape Then
      aj_in_escape = False
     Else
      Select Case Mid(aj_line, aj_i_tmp, 1)
       Case """"
        aj_in_string = Not aj_in_string
       Case ":"
        If Not aj_in_escape And Not aj_in_string Then
         aj_currentkey = Left(aj_line, aj_i_tmp - 1)
         aj_currentvalue = Mid(aj_line, aj_i_tmp + 1)
         aj_colonfound = True
         Exit For
        End If
       Case "\"
        aj_in_escape = True
      End Select
     End If
    Next
    if aj_colonfound then
     aj_currentkey = aj_Strip(aj_JSONDecode(aj_currentkey), """")
     If Not level(aj_currentlevel).exists(aj_currentkey) Then level(aj_currentlevel).Add aj_currentkey, ""
    end if
   End If
   If right(aj_line,1) = "{" Or right(aj_line,1) = "[" Then
    If Len(aj_currentkey) = 0 Then aj_currentkey = level(aj_currentlevel).Count
    Set level(aj_currentlevel).Item(aj_currentkey) = Collection()
    Set level(aj_currentlevel + 1) = level(aj_currentlevel).Item(aj_currentkey)
    aj_currentlevel = aj_currentlevel + 1
    aj_currentkey = ""
   ElseIf right(aj_line,1) = "}" Or right(aj_line,1) = "]" or right(aj_line,2) = "}," Or right(aj_line,2) = "]," Then
    aj_currentlevel = aj_currentlevel - 1
   ElseIf Len(Trim(aj_line)) > 0 Then
    if Len(aj_currentvalue) = 0 Then aj_currentvalue = aj_line
    aj_currentvalue = getJSONValue(aj_currentvalue)

    If Len(aj_currentkey) = 0 Then aj_currentkey = level(aj_currentlevel).Count
    level(aj_currentlevel).Item(aj_currentkey) = aj_currentvalue
   End If
  Next
 End Sub

 Public Function Collection()
  set Collection = Server.CreateObject("Scripting.Dictionary")
 End Function

 Public Function AddToCollection(dictobj)
  if TypeName(dictobj) <> "Dictionary" then Err.Raise 1, "AddToCollection Error", "Not a collection."
  aj_newlabel = dictobj.Count
  dictobj.Add aj_newlabel, Collection()
  set AddToCollection = dictobj.item(aj_newlabel)
 end function

 Private Function CleanUpJSONstring(aj_originalstring)
  aj_originalstring = Replace(aj_originalstring, Chr(13) & Chr(10), "")
  aj_originalstring = Mid(aj_originalstring, 2, Len(aj_originalstring) - 2)
  aj_in_string = False : aj_in_escape = False : aj_s_tmp = ""
  For aj_i_tmp = 1 To Len(aj_originalstring)
   aj_char_tmp = Mid(aj_originalstring, aj_i_tmp, 1)
   If aj_in_escape Then
    aj_in_escape = False
    aj_s_tmp = aj_s_tmp & aj_char_tmp
   Else
    Select Case aj_char_tmp
     Case "\" : aj_s_tmp = aj_s_tmp & aj_char_tmp : aj_in_escape = True
     Case """" : aj_s_tmp = aj_s_tmp & aj_char_tmp : aj_in_string = Not aj_in_string
     Case "{", "["
      aj_s_tmp = aj_s_tmp & aj_char_tmp & aj_InlineIf(aj_in_string, "", Chr(13) & Chr(10))
     Case "}", "]"
      aj_s_tmp = aj_s_tmp & aj_InlineIf(aj_in_string, "", Chr(13) & Chr(10)) & aj_char_tmp
     Case "," : aj_s_tmp = aj_s_tmp & aj_char_tmp & aj_InlineIf(aj_in_string, "", Chr(13) & Chr(10))
     Case Else : aj_s_tmp = aj_s_tmp & aj_char_tmp
    End Select
   End If
  Next

  CleanUpJSONstring = ""
  aj_s_tmp = split(aj_s_tmp, Chr(13) & Chr(10))
  For Each aj_line_tmp In aj_s_tmp
   aj_line_tmp = replace(replace(aj_line_tmp, chr(10), ""), chr(13), "")
   CleanUpJSONstring = CleanUpJSONstring & aj_Trim(aj_line_tmp) & Chr(13) & Chr(10)
  Next
 End Function

 Private Function getJSONValue(ByVal val)
  val = Trim(val)
  If Left(val,1) = ":"  Then val = Mid(val, 2)
  If Right(val,1) = "," Then val = Left(val, Len(val) - 1)
  val = Trim(val)

  Select Case val
   Case "true"  : getJSONValue = True
   Case "false" : getJSONValue = False
   Case "null" : getJSONValue = Null
   Case Else
    If (Instr(val, """") = 0) Then
     If IsNumeric(val) Then
      getJSONValue = CDbl(val)
     Else
      getJSONValue = val
     End If
    Else
     If Left(val,1) = """" Then val = Mid(val, 2)
     If Right(val,1) = """" Then val = Left(val, Len(val) - 1)
     getJSONValue = aj_JSONDecode(Trim(val))
    End If
  End Select
 End Function

 Private JSONoutput_level
 Public Function JSONoutput()
  dim wrap_dicttype, aj_label
  JSONoutput_level = 1
  wrap_dicttype = "[]"
  For Each aj_label In data
    If Not aj_IsInt(aj_label) Then wrap_dicttype = "{}"
  Next
  JSONoutput = Left(wrap_dicttype, 1) & Chr(13) & Chr(10) & GetDict(data) & Right(wrap_dicttype, 1)
 End Function

 Private Function GetDict(objDict)
  dim aj_item, aj_keyvals, aj_label, aj_dicttype
  For Each aj_item In objDict
   Select Case TypeName(objDict.Item(aj_item))
    Case "Dictionary"
     GetDict = GetDict & Space(JSONoutput_level * 4)
     
     aj_dicttype = "[]"
     For Each aj_label In objDict.Item(aj_item).Keys
       If Not aj_IsInt(aj_label) Then aj_dicttype = "{}"
     Next
     If aj_IsInt(aj_item) Then
      GetDict = GetDict & (Left(aj_dicttype,1) & Chr(13) & Chr(10))
     Else
      GetDict = GetDict & ("""" & aj_JSONEncode(aj_item) & """" & ": " & Left(aj_dicttype,1) & Chr(13) & Chr(10))
     End If
     JSONoutput_level = JSONoutput_level + 1
     
     aj_keyvals = objDict.Keys
     GetDict = GetDict & (GetSubDict(objDict.Item(aj_item)) & Space(JSONoutput_level * 4) & Right(aj_dicttype,1) & aj_InlineIf(aj_item = aj_keyvals(objDict.Count - 1),"" , ",") & Chr(13) & Chr(10))
    Case Else
     aj_keyvals =  objDict.Keys
     GetDict = GetDict & (Space(JSONoutput_level * 4) & aj_InlineIf(aj_IsInt(aj_item), "", """" & aj_JSONEncode(aj_item) & """: ") & WriteValue(objDict.Item(aj_item)) & aj_InlineIf(aj_item = aj_keyvals(objDict.Count - 1),"" , ",") & Chr(13) & Chr(10))
   End Select
  Next
 End Function

 Private Function aj_IsInt(val)
  aj_IsInt = (TypeName(val) = "Integer" Or TypeName(val) = "Long")
 End Function

 Private Function GetSubDict(objSubDict)
  GetSubDict = GetDict(objSubDict)
  JSONoutput_level= JSONoutput_level -1
 End Function

 Private Function WriteValue(ByVal val)
  Select Case TypeName(val)
   Case "Double", "Integer", "Long": WriteValue = val
   Case "Null"      : WriteValue = "null"
   Case "Boolean"     : WriteValue = aj_InlineIf(val, "true", "false")
   Case Else      : WriteValue = """" & aj_JSONEncode(val) & """"
  End Select
 End Function

 Private Function aj_JSONEncode(ByVal val)
  val = Replace(val, "\", "\\")
  val = Replace(val, """", "\""")
  'val = Replace(val, "/", "\/")
  val = Replace(val, Chr(8), "\b")
  val = Replace(val, Chr(12), "\f")
  val = Replace(val, Chr(10), "\n")
  val = Replace(val, Chr(13), "\r")
  val = Replace(val, Chr(9), "\t")
  aj_JSONEncode = Trim(val)
 End Function

 Private Function aj_JSONDecode(ByVal val)
  val = Replace(val, "\""", """")
  val = Replace(val, "\\", "\")
  val = Replace(val, "\/", "/")
  val = Replace(val, "\b", Chr(8))
  val = Replace(val, "\f", Chr(12))
  val = Replace(val, "\n", Chr(10))
  val = Replace(val, "\r", Chr(13))
  val = Replace(val, "\t", Chr(9))
  aj_JSONDecode = Trim(val)
 End Function

 Private Function aj_InlineIf(condition, returntrue, returnfalse)
  If condition Then aj_InlineIf = returntrue Else aj_InlineIf = returnfalse
 End Function

 Private Function aj_Strip(ByVal val, stripper)
  If Left(val, 1) = stripper Then val = Mid(val, 2)
  If Right(val, 1) = stripper Then val = Left(val, Len(val) - 1)
  aj_Strip = val
 End Function

 Private Function aj_MultilineTrim(TextData)
  aj_MultilineTrim = aj_RegExp.Replace(TextData, "$1")
 End Function

 private function aj_Trim(val)
  aj_Trim = Trim(val)
  Do While Left(aj_Trim, 1) = Chr(9) : aj_Trim = Mid(aj_Trim, 2) : Loop
  Do While Right(aj_Trim, 1) = Chr(9) : aj_Trim = Left(aj_Trim, Len(aj_Trim) - 1) : Loop
  aj_Trim = Trim(aj_Trim)
 end function
End Class
%>