17. 1. 5.

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

login.asp 파일
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<script type="text/javascript">
function instagramlogin(){
 var client_id = "97e52e1da4064299b2a1ba87db3c4167";
 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 파일
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<!-- #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 파일
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
<%
'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
%>