Best Python code snippet using locust
qmatch.py
Source:qmatch.py
1#! /usr/bin/env python2# -*- coding: utf-8 -*-3import os, re, sys4import urllib,urllib25from xml.dom import minidom as pydom6class QueryResComp:7 def __init__(self, serviceName):8 self.serviceName = serviceName9 self.queryString = ''10 self.leftagg = 'http://10.249.84.102:9000'11 self.rightagg = 'http://aggregator.daogou.yh.vip.aliyun.com:9090'12 qStr = ()13 self.leftXmlRes = ''14 self.rightXmlRes = ''15 def fetchResult(self,queryString):16 qStr = (('shortcut','--Method=Search --Parameter="'+queryString+'"'),)17 print urllib.urlencode(qStr)18 # req=urllib2.Request(self.rightagg,urllib.urlencode(qStr))19 # u=urllib2.urlopen(req)20 # print u.read()21 22 def parseUrlList(self,xmlRes):23 res = []24 sec = ''25 26 if self.serviceName == 'daogou_auction':27 sec = 'nid'28 else:29 sec = 'url'30 dom = pydom.parseString(xmlRes)31 for ele in dom.getElementsByTagName(sec):32 res.append(ele.firstChild.wholeText)33 return res34 35 def isEqual(self):36 if(len(self.leftXmlRes)==0 or len(self.rightXmlRes)==0):37 print "Query[%s] got 0result" % self.queryString38 return False39 leftUrlArray= self.parseUrlList(self.leftXmlRes)40 rightUrlArray= self.parseUrlList(self.rightXmlRes)41 42 if(leftUrlArray == rightUrlArray):43 return True44 else:45 return False46 47 48 49 50if __name__ == '__main__':51 52 xmlstr = '''<?xml version="1.0" encoding="UTF-8"?>53<Root>54<TotalTime>0.055</TotalTime>55<hits numhits="10" totalhits="117892">56 <hit hash_id="3" docid="9212704">57 <fields>58 <biz30day><![CDATA[1]]></biz30day>59 <cat_id><![CDATA[1512]]></cat_id>60 <comment0><![CDATA[è¶
级å欢~~~é度è¿å¾å¿«ãè¶
å¼]]></comment0>61 <comment1><![CDATA[è´§å¾æ£ã]]></comment1>62 <comment2><![CDATA[]]></comment2>63 <comment_num><![CDATA[2]]></comment_num>64 <comment_rate0><![CDATA[4]]></comment_rate0>65 <comment_rate1><![CDATA[41]]></comment_rate1>66 <comment_rate2><![CDATA[]]></comment_rate2>67 <comment_user0><![CDATA[1157saygoodbye]]></comment_user0>68 <comment_user1><![CDATA[changzheng92]]></comment_user1>69 <comment_user2><![CDATA[]]></comment_user2>70 <commercial><![CDATA[0]]></commercial>71 <desp><![CDATA[ç¢åè¦æ ¼72顯示ææ é±èææ73ææ©åè½ãé»...]]></desp>74 <grade_avg><![CDATA[0]]></grade_avg>75 <nick><![CDATA[zpin10]]></nick>76 <nid><![CDATA[4052667480]]></nid>77 <people_num><![CDATA[0]]></people_num>78 <pict_url><![CDATA[i8/T1F18AXm4jXXbkT1c0_034730.jpg]]></pict_url>79 <pid><![CDATA[78348588]]></pid>80 <pidvidt><![CDATA[]]></pidvidt>81 <product_num><![CDATA[6201]]></product_num>82 <ratesum><![CDATA[9]]></ratesum>83 <reserve_price><![CDATA[2020]]></reserve_price>84 <seller_goodrate><![CDATA[9993]]></seller_goodrate>85 <title><![CDATA[*äºå¹´é»ç³å¥½åºä¸å
èµä»ä¿é*<font color=red>Nokia</font>/诺åºäº X6]]></title>86 <total_sold_quantity><![CDATA[11]]></total_sold_quantity>87 <user_nid><![CDATA[22839402]]></user_nid>88 <user_strid><![CDATA[cfc07f8231e153dbdbfe872bf9f41ff0]]></user_strid>89 </fields>90 <property>91 </property>92 <sortExprValues>93 0.00021017194 </sortExprValues>95 </hit>96 <hit hash_id="0" docid="9190361">97 <fields>98 <biz30day><![CDATA[1]]></biz30day>99 <cat_id><![CDATA[50012584]]></cat_id>100 <comment0><![CDATA[ç»å¦¹å¦¹ä¹°çï¼å¥¹è¯´ä¸éï¼åå¨è¡ä¸ä¹°çä»·æ ¼å·®ä¸å¤ï¼...]]></comment0>101 <comment1><![CDATA[å®è´é½å¾ä¸é,买家æ度è好äº,以åæéè¦è¿ä¼ç»§ç»...]]></comment1>102 <comment2><![CDATA[好使 没å å°±æ¯æç¹è´µ]]></comment2>103 <comment_num><![CDATA[6]]></comment_num>104 <comment_rate0><![CDATA[501]]></comment_rate0>105 <comment_rate1><![CDATA[41]]></comment_rate1>106 <comment_rate2><![CDATA[41]]></comment_rate2>107 <comment_user0><![CDATA[空ç¶åzch]]></comment_user0>108 <comment_user1><![CDATA[huihui_katrina]]></comment_user1>109 <comment_user2><![CDATA[showwinter]]></comment_user2>110 <commercial><![CDATA[0]]></commercial>111 <desp><![CDATA[<font color=red>Nokia</font>线å
E65 E90 E95 N70å
çµå¨ N71 N72线å
]]></desp>112 <grade_avg><![CDATA[0]]></grade_avg>113 <nick><![CDATA[taotao8601]]></nick>114 <nid><![CDATA[4042745681]]></nid>115 <people_num><![CDATA[0]]></people_num>116 <pict_url><![CDATA[i8/T1b0JBXlhyXXXSaBs2_044823.jpg]]></pict_url>117 <pid><![CDATA[23620066]]></pid>118 <pidvidt><![CDATA[]]></pidvidt>119 <product_num><![CDATA[2806]]></product_num>120 <ratesum><![CDATA[11]]></ratesum>121 <reserve_price><![CDATA[8]]></reserve_price>122 <seller_goodrate><![CDATA[9730]]></seller_goodrate>123 <title><![CDATA[<font color=red>Nokia</font>线å
E65 E90 E95 N70å
çµå¨ N71 N72线å
N73线å
]]></title>124 <total_sold_quantity><![CDATA[72]]></total_sold_quantity>125 <user_nid><![CDATA[74665395]]></user_nid>126 <user_strid><![CDATA[561198dfa4cd940c717cc84ca2b5fbd8]]></user_strid>127 </fields>128 <property>129 </property>130 <sortExprValues>131 0.000210171132 </sortExprValues>133 </hit>134 <hit hash_id="2" docid="9176120">135 <fields>136 <biz30day><![CDATA[1]]></biz30day>137 <cat_id><![CDATA[1512]]></cat_id>138 <comment0><![CDATA[]]></comment0>139 <comment1><![CDATA[]]></comment1>140 <comment2><![CDATA[]]></comment2>141 <comment_num><![CDATA[0]]></comment_num>142 <comment_rate0><![CDATA[]]></comment_rate0>143 <comment_rate1><![CDATA[]]></comment_rate1>144 <comment_rate2><![CDATA[]]></comment_rate2>145 <comment_user0><![CDATA[]]></comment_user0>146 <comment_user1><![CDATA[]]></comment_user1>147 <comment_user2><![CDATA[]]></comment_user2>148 <commercial><![CDATA[0]]></commercial>149 <desp><![CDATA[C ç³»ä¸é¶ QWERTY 款å¼150诺åºäºäº 2010 å¹´ 4 ...]]></desp>151 <grade_avg><![CDATA[0]]></grade_avg>152 <nick><![CDATA[zheng570546321]]></nick>153 <nid><![CDATA[6701442378]]></nid>154 <people_num><![CDATA[0]]></people_num>155 <pict_url><![CDATA[i2/T1ivVKXaFlXXc8A6o._113005.jpg]]></pict_url>156 <pid><![CDATA[96312365]]></pid>157 <pidvidt><![CDATA[]]></pidvidt>158 <product_num><![CDATA[6125]]></product_num>159 <ratesum><![CDATA[5]]></ratesum>160 <reserve_price><![CDATA[1800]]></reserve_price>161 <seller_goodrate><![CDATA[10000]]></seller_goodrate>162 <title><![CDATA[<font color=red>Nokia</font>/诺åºäº C6]]></title>163 <total_sold_quantity><![CDATA[1]]></total_sold_quantity>164 <user_nid><![CDATA[346568297]]></user_nid>165 <user_strid><![CDATA[a8325eb660a709ee925bc8c3928845d2]]></user_strid>166 </fields>167 <property>168 </property>169 <sortExprValues>170 0.000210171171 </sortExprValues>172 </hit>173 <hit hash_id="0" docid="9168980">174 <fields>175 <biz30day><![CDATA[1]]></biz30day>176 <cat_id><![CDATA[1512]]></cat_id>177 <comment0><![CDATA[æ¯è¡è´§ï¼ææºè¿ä¸éã第ä¸æ¬¡ä¸æ诺åºäºçææºï¼æè§...]]></comment0>178 <comment1><![CDATA[ææºæ¯å¥½ææºï¼æææ¯å¥½ææï¼å«ççç没ä»ä¹äºã]]></comment1>179 <comment2><![CDATA[ä¸è¥¿å¾å¥½ï¼]]></comment2>180 <comment_num><![CDATA[4]]></comment_num>181 <comment_rate0><![CDATA[91]]></comment_rate0>182 <comment_rate1><![CDATA[11]]></comment_rate1>183 <comment_rate2><![CDATA[151]]></comment_rate2>184 <comment_user0><![CDATA[å¥è©famliy]]></comment_user0>185 <comment_user1><![CDATA[寻æ¾æ³å¦æ¯]]></comment_user1>186 <comment_user2><![CDATA[qq_190257]]></comment_user2>187 <commercial><![CDATA[0]]></commercial>188 <desp><![CDATA[æ°é²åºççC6éç
§ï¼C ç³»ä¸é¶ QWERTY 款å¼189...]]></desp>190 <grade_avg><![CDATA[0]]></grade_avg>191 <nick><![CDATA[yw09098]]></nick>192 <nid><![CDATA[6822469113]]></nid>193 <people_num><![CDATA[0]]></people_num>194 <pict_url><![CDATA[i3/T1y2lHXfFvXXb4jYza_120258.jpg]]></pict_url>195 <pid><![CDATA[96312365]]></pid>196 <pidvidt><![CDATA[]]></pidvidt>197 <product_num><![CDATA[6125]]></product_num>198 <ratesum><![CDATA[7]]></ratesum>199 <reserve_price><![CDATA[2198]]></reserve_price>200 <seller_goodrate><![CDATA[10000]]></seller_goodrate>201 <title><![CDATA[诺åºäº/<font color=red>NOKIA</font> C6-00ã大éè¡è´§+å
¨å½èä¿+éåºå®ä½åº+å票+å
é®ã]]></title>202 <total_sold_quantity><![CDATA[6]]></total_sold_quantity>203 <user_nid><![CDATA[13793617]]></user_nid>204 <user_strid><![CDATA[01c2f7bce131ce8f2b051513cf9128a1]]></user_strid>205 </fields>206 <property>207 </property>208 <sortExprValues>209 0.000210171210 </sortExprValues>211 </hit>212 <hit hash_id="2" docid="9145695">213 <fields>214 <biz30day><![CDATA[1]]></biz30day>215 <cat_id><![CDATA[50003775]]></cat_id>216 <comment0><![CDATA[]]></comment0>217 <comment1><![CDATA[]]></comment1>218 <comment2><![CDATA[]]></comment2>219 <comment_num><![CDATA[0]]></comment_num>220 <comment_rate0><![CDATA[]]></comment_rate0>221 <comment_rate1><![CDATA[]]></comment_rate1>222 <comment_rate2><![CDATA[]]></comment_rate2>223 <comment_user0><![CDATA[]]></comment_user0>224 <comment_user1><![CDATA[]]></comment_user1>225 <comment_user2><![CDATA[]]></comment_user2>226 <commercial><![CDATA[0]]></commercial>227 <desp><![CDATA[<font color=red>Nokia</font>/诺åºäº <font color=red>Nokia</font> E75 é»è²ææºå¤å£³å
¨å¥ ...]]></desp>228 <grade_avg><![CDATA[0]]></grade_avg>229 <nick><![CDATA[ccue163]]></nick>230 <nid><![CDATA[7883573863]]></nid>231 <people_num><![CDATA[0]]></people_num>232 <pict_url><![CDATA[i4/T1nl4NXityXXaK5EoZ_034002.jpg]]></pict_url>233 <pid><![CDATA[-7883573863]]></pid>234 <pidvidt><![CDATA[]]></pidvidt>235 <product_num><![CDATA[0]]></product_num>236 <ratesum><![CDATA[6]]></ratesum>237 <reserve_price><![CDATA[55]]></reserve_price>238 <seller_goodrate><![CDATA[9898]]></seller_goodrate>239 <title><![CDATA[<font color=red>Nokia</font>/诺åºäº <font color=red>Nokia</font> E75 é»è²ææºå¤å£³å
¨å¥ 带æé®åææºå·¥å
·]]></title>240 <total_sold_quantity><![CDATA[0]]></total_sold_quantity>241 <user_nid><![CDATA[350400477]]></user_nid>242 <user_strid><![CDATA[4e1d00e029058aaa1e1d53e9abefcab4]]></user_strid>243 </fields>244 <property>245 </property>246 <sortExprValues>247 0.000210171248 </sortExprValues>249 </hit>250 <hit hash_id="2" docid="9139861">251 <fields>252 <biz30day><![CDATA[2]]></biz30day>253 <cat_id><![CDATA[50012584]]></cat_id>254 <comment0><![CDATA[ä¸å¥½ææè¿å 天æºå¿ 确认æäº]]></comment0>255 <comment1><![CDATA[]]></comment1>256 <comment2><![CDATA[]]></comment2>257 <comment_num><![CDATA[1]]></comment_num>258 <comment_rate0><![CDATA[11]]></comment_rate0>259 <comment_rate1><![CDATA[]]></comment_rate1>260 <comment_rate2><![CDATA[]]></comment_rate2>261 <comment_user0><![CDATA[zgqskzhifubao]]></comment_user0>262 <comment_user1><![CDATA[]]></comment_user1>263 <comment_user2><![CDATA[]]></comment_user2>264 <commercial><![CDATA[0]]></commercial>265 <desp><![CDATA[<font color=red>Nokia</font>线å
E65 E90 E95 N70å
çµå¨ N71 N72...]]></desp>266 <grade_avg><![CDATA[0]]></grade_avg>267 <nick><![CDATA[è·¯è¿æ³å]]></nick>268 <nid><![CDATA[6698634985]]></nid>269 <people_num><![CDATA[0]]></people_num>270 <pict_url><![CDATA[i2/T105xGXlNqXXbUsE6b_095528.jpg]]></pict_url>271 <pid><![CDATA[23615829]]></pid>272 <pidvidt><![CDATA[]]></pidvidt>273 <product_num><![CDATA[6405]]></product_num>274 <ratesum><![CDATA[9]]></ratesum>275 <reserve_price><![CDATA[8]]></reserve_price>276 <seller_goodrate><![CDATA[9587]]></seller_goodrate>277 <title><![CDATA[<font color=red>Nokia</font>线å
E65 E90 E95 N70å
çµå¨ N71 N72线å
N73线å
]]></title>278 <total_sold_quantity><![CDATA[6]]></total_sold_quantity>279 <user_nid><![CDATA[117818253]]></user_nid>280 <user_strid><![CDATA[19d4a11e148c07ee3288ab9d96378482]]></user_strid>281 </fields>282 <property>283 </property>284 <sortExprValues>285 0.000210171286 </sortExprValues>287 </hit>288 <hit hash_id="3" docid="9137643">289 <fields>290 <biz30day><![CDATA[1]]></biz30day>291 <cat_id><![CDATA[50010614]]></cat_id>292 <comment0><![CDATA[]]></comment0>293 <comment1><![CDATA[]]></comment1>294 <comment2><![CDATA[]]></comment2>295 <comment_num><![CDATA[0]]></comment_num>296 <comment_rate0><![CDATA[]]></comment_rate0>297 <comment_rate1><![CDATA[]]></comment_rate1>298 <comment_rate2><![CDATA[]]></comment_rate2>299 <comment_user0><![CDATA[]]></comment_user0>300 <comment_user1><![CDATA[]]></comment_user1>301 <comment_user2><![CDATA[]]></comment_user2>302 <commercial><![CDATA[0]]></commercial>303 <desp><![CDATA[产åæè¿°ï¼èç¹ï¼LT)<font color=red>Nokia</font>/诺åºäº 3610A/...]]></desp>304 <grade_avg><![CDATA[0]]></grade_avg>305 <nick><![CDATA[æ¨æ è¸]]></nick>306 <nid><![CDATA[6817724341]]></nid>307 <people_num><![CDATA[0]]></people_num>308 <pict_url><![CDATA[i3/T16vtHXdhfXXakivg0_035148.jpg]]></pict_url>309 <pid><![CDATA[-6817724341]]></pid>310 <pidvidt><![CDATA[]]></pidvidt>311 <product_num><![CDATA[0]]></product_num>312 <ratesum><![CDATA[3]]></ratesum>313 <reserve_price><![CDATA[20]]></reserve_price>314 <seller_goodrate><![CDATA[9655]]></seller_goodrate>315 <title><![CDATA[èç¹ï¼LT)<font color=red>Nokia</font>/诺åºäº3610A/6555带座æ线]]></title>316 <total_sold_quantity><![CDATA[1]]></total_sold_quantity>317 <user_nid><![CDATA[436855978]]></user_nid>318 <user_strid><![CDATA[4b9ad1c3c7f405847c2a47815ffc08c6]]></user_strid>319 </fields>320 <property>321 </property>322 <sortExprValues>323 0.000210171324 </sortExprValues>325 </hit>326 <hit hash_id="0" docid="9128114">327 <fields>328 <biz30day><![CDATA[1]]></biz30day>329 <cat_id><![CDATA[1512]]></cat_id>330 <comment0><![CDATA[è¿ä¸ªé¢è²é常æ¼äº®ï¼å欢ï¼èæ¿æå¡ä¸éï¼è¿ç»æå®è£
...]]></comment0>331 <comment1><![CDATA[é¢è²å¾å¥½çï¼èæ¿è¿éäºå¥½å¤ç¤¼åï¼è¿å
é®ï¼æ¯æå¨...]]></comment1>332 <comment2><![CDATA[åè´§å¾å¿«ï¼ææºå¾å欢ï¼è¿ä¸ªé¢è²å¾ä¸éï¼èæ¿äººå¾...]]></comment2>333 <comment_num><![CDATA[7]]></comment_num>334 <comment_rate0><![CDATA[4]]></comment_rate0>335 <comment_rate1><![CDATA[4]]></comment_rate1>336 <comment_rate2><![CDATA[4]]></comment_rate2>337 <comment_user0><![CDATA[亲ç±çå¡å¡88]]></comment_user0>338 <comment_user1><![CDATA[æ´å¤©å¦¹å¦¹8]]></comment_user1>339 <comment_user2><![CDATA[çå¿ä»¬ççª]]></comment_user2>340 <commercial><![CDATA[0]]></commercial>341 <desp><![CDATA[----------------------------------------...]]></desp>342 <grade_avg><![CDATA[0]]></grade_avg>343 <nick><![CDATA[èèä¸ç«å¼è´ç©]]></nick>344 <nid><![CDATA[6722451228]]></nid>345 <people_num><![CDATA[0]]></people_num>346 <pict_url><![CDATA[i3/T15rpDXelyXXbTA4gV_020655.jpg]]></pict_url>347 <pid><![CDATA[72468326]]></pid>348 <pidvidt><![CDATA[]]></pidvidt>349 <product_num><![CDATA[7382]]></product_num>350 <ratesum><![CDATA[9]]></ratesum>351 <reserve_price><![CDATA[1280]]></reserve_price>352 <seller_goodrate><![CDATA[9972]]></seller_goodrate>353 <title><![CDATA[ãæ¡åé讯ã<font color=red>Nokia</font>/诺åºäº6700S/Slide æºè½æºæ¸¯è¡ 红èç´«ç²ç»¿é¶]]></title>354 <total_sold_quantity><![CDATA[4]]></total_sold_quantity>355 <user_nid><![CDATA[279716453]]></user_nid>356 <user_strid><![CDATA[95604865bdd3499532e79eec4e399401]]></user_strid>357 </fields>358 <property>359 </property>360 <sortExprValues>361 0.000210171362 </sortExprValues>363 </hit>364 <hit hash_id="1" docid="9124486">365 <fields>366 <biz30day><![CDATA[1]]></biz30day>367 <cat_id><![CDATA[150704]]></cat_id>368 <comment0><![CDATA[åå·¥è¿æãä½æ¯çç¡®å大ä¸å°]]></comment0>369 <comment1><![CDATA[å¾ä¸éçå®è´ å¾æ»¡æ]]></comment1>370 <comment2><![CDATA[èµä¸ä¸ª]]></comment2>371 <comment_num><![CDATA[3]]></comment_num>372 <comment_rate0><![CDATA[501]]></comment_rate0>373 <comment_rate1><![CDATA[4]]></comment_rate1>374 <comment_rate2><![CDATA[91]]></comment_rate2>375 <comment_user0><![CDATA[gegega]]></comment_user0>376 <comment_user1><![CDATA[ççç±åé¥]]></comment_user1>377 <comment_user2><![CDATA[å°æ´1799]]></comment_user2>378 <commercial><![CDATA[0]]></commercial>379 <desp><![CDATA[----------------------------------------...]]></desp>380 <grade_avg><![CDATA[0]]></grade_avg>381 <nick><![CDATA[baiyunæ°ç ]]></nick>382 <nid><![CDATA[6219039792]]></nid>383 <people_num><![CDATA[0]]></people_num>384 <pict_url><![CDATA[i1/T1RfpFXaFjXXbqLRM3_050811.jpg]]></pict_url>385 <pid><![CDATA[73686392]]></pid>386 <pidvidt><![CDATA[]]></pidvidt>387 <product_num><![CDATA[662]]></product_num>388 <ratesum><![CDATA[9]]></ratesum>389 <reserve_price><![CDATA[47]]></reserve_price>390 <seller_goodrate><![CDATA[10000]]></seller_goodrate>391 <title><![CDATA[澳洲PDairç«å½©å¤è² <font color=red>Nokia</font> n97mini ç¡
è¶å¥ åè´¨ä¹é 红è²]]></title>392 <total_sold_quantity><![CDATA[9]]></total_sold_quantity>393 <user_nid><![CDATA[212478869]]></user_nid>394 <user_strid><![CDATA[f3327a1de93bee4398481d69f08b08e3]]></user_strid>395 </fields>396 <property>397 </property>398 <sortExprValues>399 0.000210171400 </sortExprValues>401 </hit>402 <hit hash_id="0" docid="9122611">403 <fields>404 <biz30day><![CDATA[2]]></biz30day>405 <cat_id><![CDATA[50012587]]></cat_id>406 <comment0><![CDATA[èæ¿å¾åé...]]></comment0>407 <comment1><![CDATA[èæ¿ä¾ç¶åéï¼]]></comment1>408 <comment2><![CDATA[]]></comment2>409 <comment_num><![CDATA[2]]></comment_num>410 <comment_rate0><![CDATA[11]]></comment_rate0>411 <comment_rate1><![CDATA[11]]></comment_rate1>412 <comment_rate2><![CDATA[]]></comment_rate2>413 <comment_user0><![CDATA[ç¨yç¡è´°]]></comment_user0>414 <comment_user1><![CDATA[ç¨yç¡è´°]]></comment_user1>415 <comment_user2><![CDATA[]]></comment_user2>416 <commercial><![CDATA[0]]></commercial>417 <desp><![CDATA[使ç¨è¯´æï¼4181ã第ä¸æ¥æ¸
æ´å±å¹ï¼ç¨éèµ ç...]]></desp>419 <grade_avg><![CDATA[0]]></grade_avg>420 <nick><![CDATA[讨åå¹³å®å¤]]></nick>421 <nid><![CDATA[6818006015]]></nid>422 <people_num><![CDATA[0]]></people_num>423 <pict_url><![CDATA[i6/T1tUppXh0aXXbLmTo8_102003.jpg]]></pict_url>424 <pid><![CDATA[80427683]]></pid>425 <pidvidt><![CDATA[]]></pidvidt>426 <product_num><![CDATA[0]]></product_num>427 <ratesum><![CDATA[3]]></ratesum>428 <reserve_price><![CDATA[68]]></reserve_price>429 <seller_goodrate><![CDATA[10000]]></seller_goodrate>430 <title><![CDATA[é¿è¿ªæ®ææºèä¸å®¶-<font color=red>NOKIA</font>诺åºäº 5230 幻彩é»ç³ç³»åå¥è£
]]></title>431 <total_sold_quantity><![CDATA[2]]></total_sold_quantity>432 <user_nid><![CDATA[56983709]]></user_nid>433 <user_strid><![CDATA[71f84a0915e9062e30df53c960641f21]]></user_strid>434 </fields>435 <property>436 </property>437 <sortExprValues>438 0.000210171439 </sortExprValues>440 </hit>441</hits>442<AggregateResults>443</AggregateResults>444<Error>445 <ErrorCode>0</ErrorCode>446 <ErrorDescription></ErrorDescription>447</Error>448</Root>449'''450 xmlstr1 = '''<?xml version="1.0" encoding="UTF-8"?>451<Root>452<TotalTime>0.055</TotalTime>453<hits numhits="10" totalhits="117892">454 <hit hash_id="3" docid="9212704">455 <fields>456 <biz30day><![CDATA[1]]></biz30day>457 <cat_id><![CDATA[1512]]></cat_id>458 <comment0><![CDATA[è¶
级å欢~~~é度è¿å¾å¿«ãè¶
å¼]]></comment0>459 <comment1><![CDATA[è´§å¾æ£ã]]></comment1>460 <comment2><![CDATA[]]></comment2>461 <comment_num><![CDATA[2]]></comment_num>462 <comment_rate0><![CDATA[4]]></comment_rate0>463 <comment_rate1><![CDATA[41]]></comment_rate1>464 <comment_rate2><![CDATA[]]></comment_rate2>465 <comment_user0><![CDATA[1157saygoodbye]]></comment_user0>466 <comment_user1><![CDATA[changzheng92]]></comment_user1>467 <comment_user2><![CDATA[]]></comment_user2>468 <commercial><![CDATA[0]]></commercial>469 <desp><![CDATA[ç¢åè¦æ ¼470顯示ææ é±èææ471ææ©åè½ãé»...]]></desp>472 <grade_avg><![CDATA[0]]></grade_avg>473 <nick><![CDATA[zpin10]]></nick>474 <nid><![CDATA[4052667480]]></nid>475 <people_num><![CDATA[0]]></people_num>476 <pict_url><![CDATA[i8/T1F18AXm4jXXbkT1c0_034730.jpg]]></pict_url>477 <pid><![CDATA[78348588]]></pid>478 <pidvidt><![CDATA[]]></pidvidt>479 <product_num><![CDATA[6201]]></product_num>480 <ratesum><![CDATA[9]]></ratesum>481 <reserve_price><![CDATA[2020]]></reserve_price>482 <seller_goodrate><![CDATA[9993]]></seller_goodrate>483 <title><![CDATA[*äºå¹´é»ç³å¥½åºä¸å
èµä»ä¿é*<font color=red>Nokia</font>/诺åºäº X6]]></title>484 <total_sold_quantity><![CDATA[11]]></total_sold_quantity>485 <user_nid><![CDATA[22839402]]></user_nid>486 <user_strid><![CDATA[cfc07f8231e153dbdbfe872bf9f41ff0]]></user_strid>487 </fields>488 <property>489 </property>490 <sortExprValues>491 0.000210171492 </sortExprValues>493 </hit>494 <hit hash_id="0" docid="9190361">495 <fields>496 <biz30day><![CDATA[1]]></biz30day>497 <cat_id><![CDATA[50012584]]></cat_id>498 <comment0><![CDATA[ç»å¦¹å¦¹ä¹°çï¼å¥¹è¯´ä¸éï¼åå¨è¡ä¸ä¹°çä»·æ ¼å·®ä¸å¤ï¼...]]></comment0>499 <comment1><![CDATA[å®è´é½å¾ä¸é,买家æ度è好äº,以åæéè¦è¿ä¼ç»§ç»...]]></comment1>500 <comment2><![CDATA[好使 没å å°±æ¯æç¹è´µ]]></comment2>501 <comment_num><![CDATA[6]]></comment_num>502 <comment_rate0><![CDATA[501]]></comment_rate0>503 <comment_rate1><![CDATA[41]]></comment_rate1>504 <comment_rate2><![CDATA[41]]></comment_rate2>505 <comment_user0><![CDATA[空ç¶åzch]]></comment_user0>506 <comment_user1><![CDATA[huihui_katrina]]></comment_user1>507 <comment_user2><![CDATA[showwinter]]></comment_user2>508 <commercial><![CDATA[0]]></commercial>509 <desp><![CDATA[<font color=red>Nokia</font>线å
E65 E90 E95 N70å
çµå¨ N71 N72线å
]]></desp>510 <grade_avg><![CDATA[0]]></grade_avg>511 <nick><![CDATA[taotao8601]]></nick>512 <nid><![CDATA[4042745681]]></nid>513 <people_num><![CDATA[0]]></people_num>514 <pict_url><![CDATA[i8/T1b0JBXlhyXXXSaBs2_044823.jpg]]></pict_url>515 <pid><![CDATA[23620066]]></pid>516 <pidvidt><![CDATA[]]></pidvidt>517 <product_num><![CDATA[2806]]></product_num>518 <ratesum><![CDATA[11]]></ratesum>519 <reserve_price><![CDATA[8]]></reserve_price>520 <seller_goodrate><![CDATA[9730]]></seller_goodrate>521 <title><![CDATA[<font color=red>Nokia</font>线å
E65 E90 E95 N70å
çµå¨ N71 N72线å
N73线å
]]></title>522 <total_sold_quantity><![CDATA[72]]></total_sold_quantity>523 <user_nid><![CDATA[74665395]]></user_nid>524 <user_strid><![CDATA[561198dfa4cd940c717cc84ca2b5fbd8]]></user_strid>525 </fields>526 <property>527 </property>528 <sortExprValues>529 0.000210171530 </sortExprValues>531 </hit>532 <hit hash_id="2" docid="9176120">533 <fields>534 <biz30day><![CDATA[1]]></biz30day>535 <cat_id><![CDATA[1512]]></cat_id>536 <comment0><![CDATA[]]></comment0>537 <comment1><![CDATA[]]></comment1>538 <comment2><![CDATA[]]></comment2>539 <comment_num><![CDATA[0]]></comment_num>540 <comment_rate0><![CDATA[]]></comment_rate0>541 <comment_rate1><![CDATA[]]></comment_rate1>542 <comment_rate2><![CDATA[]]></comment_rate2>543 <comment_user0><![CDATA[]]></comment_user0>544 <comment_user1><![CDATA[]]></comment_user1>545 <comment_user2><![CDATA[]]></comment_user2>546 <commercial><![CDATA[0]]></commercial>547 <desp><![CDATA[C ç³»ä¸é¶ QWERTY 款å¼548诺åºäºäº 2010 å¹´ 4 ...]]></desp>549 <grade_avg><![CDATA[0]]></grade_avg>550 <nick><![CDATA[zheng570546321]]></nick>551 <nid><![CDATA[6701442378]]></nid>552 <people_num><![CDATA[0]]></people_num>553 <pict_url><![CDATA[i2/T1ivVKXaFlXXc8A6o._113005.jpg]]></pict_url>554 <pid><![CDATA[96312365]]></pid>555 <pidvidt><![CDATA[]]></pidvidt>556 <product_num><![CDATA[6125]]></product_num>557 <ratesum><![CDATA[5]]></ratesum>558 <reserve_price><![CDATA[1800]]></reserve_price>559 <seller_goodrate><![CDATA[10000]]></seller_goodrate>560 <title><![CDATA[<font color=red>Nokia</font>/诺åºäº C6]]></title>561 <total_sold_quantity><![CDATA[1]]></total_sold_quantity>562 <user_nid><![CDATA[346568297]]></user_nid>563 <user_strid><![CDATA[a8325eb660a709ee925bc8c3928845d2]]></user_strid>564 </fields>565 <property>566 </property>567 <sortExprValues>568 0.000210171569 </sortExprValues>570 </hit>571 <hit hash_id="0" docid="9168980">572 <fields>573 <biz30day><![CDATA[1]]></biz30day>574 <cat_id><![CDATA[1512]]></cat_id>575 <comment0><![CDATA[æ¯è¡è´§ï¼ææºè¿ä¸éã第ä¸æ¬¡ä¸æ诺åºäºçææºï¼æè§...]]></comment0>576 <comment1><![CDATA[ææºæ¯å¥½ææºï¼æææ¯å¥½ææï¼å«ççç没ä»ä¹äºã]]></comment1>577 <comment2><![CDATA[ä¸è¥¿å¾å¥½ï¼]]></comment2>578 <comment_num><![CDATA[4]]></comment_num>579 <comment_rate0><![CDATA[91]]></comment_rate0>580 <comment_rate1><![CDATA[11]]></comment_rate1>581 <comment_rate2><![CDATA[151]]></comment_rate2>582 <comment_user0><![CDATA[å¥è©famliy]]></comment_user0>583 <comment_user1><![CDATA[寻æ¾æ³å¦æ¯]]></comment_user1>584 <comment_user2><![CDATA[qq_190257]]></comment_user2>585 <commercial><![CDATA[0]]></commercial>586 <desp><![CDATA[æ°é²åºççC6éç
§ï¼C ç³»ä¸é¶ QWERTY 款å¼587...]]></desp>588 <grade_avg><![CDATA[0]]></grade_avg>589 <nick><![CDATA[yw09098]]></nick>590 <nid><![CDATA[6822469113]]></nid>591 <people_num><![CDATA[0]]></people_num>592 <pict_url><![CDATA[i3/T1y2lHXfFvXXb4jYza_120258.jpg]]></pict_url>593 <pid><![CDATA[96312365]]></pid>594 <pidvidt><![CDATA[]]></pidvidt>595 <product_num><![CDATA[6125]]></product_num>596 <ratesum><![CDATA[7]]></ratesum>597 <reserve_price><![CDATA[2198]]></reserve_price>598 <seller_goodrate><![CDATA[10000]]></seller_goodrate>599 <title><![CDATA[诺åºäº/<font color=red>NOKIA</font> C6-00ã大éè¡è´§+å
¨å½èä¿+éåºå®ä½åº+å票+å
é®ã]]></title>600 <total_sold_quantity><![CDATA[6]]></total_sold_quantity>601 <user_nid><![CDATA[13793617]]></user_nid>602 <user_strid><![CDATA[01c2f7bce131ce8f2b051513cf9128a1]]></user_strid>603 </fields>604 <property>605 </property>606 <sortExprValues>607 0.000210171608 </sortExprValues>609 </hit>610 <hit hash_id="2" docid="9145695">611 <fields>612 <biz30day><![CDATA[1]]></biz30day>613 <cat_id><![CDATA[50003775]]></cat_id>614 <comment0><![CDATA[]]></comment0>615 <comment1><![CDATA[]]></comment1>616 <comment2><![CDATA[]]></comment2>617 <comment_num><![CDATA[0]]></comment_num>618 <comment_rate0><![CDATA[]]></comment_rate0>619 <comment_rate1><![CDATA[]]></comment_rate1>620 <comment_rate2><![CDATA[]]></comment_rate2>621 <comment_user0><![CDATA[]]></comment_user0>622 <comment_user1><![CDATA[]]></comment_user1>623 <comment_user2><![CDATA[]]></comment_user2>624 <commercial><![CDATA[0]]></commercial>625 <desp><![CDATA[<font color=red>Nokia</font>/诺åºäº <font color=red>Nokia</font> E75 é»è²ææºå¤å£³å
¨å¥ ...]]></desp>626 <grade_avg><![CDATA[0]]></grade_avg>627 <nick><![CDATA[ccue163]]></nick>628 <nid><![CDATA[7883573863]]></nid>629 <people_num><![CDATA[0]]></people_num>630 <pict_url><![CDATA[i4/T1nl4NXityXXaK5EoZ_034002.jpg]]></pict_url>631 <pid><![CDATA[-7883573863]]></pid>632 <pidvidt><![CDATA[]]></pidvidt>633 <product_num><![CDATA[0]]></product_num>634 <ratesum><![CDATA[6]]></ratesum>635 <reserve_price><![CDATA[55]]></reserve_price>636 <seller_goodrate><![CDATA[9898]]></seller_goodrate>637 <title><![CDATA[<font color=red>Nokia</font>/诺åºäº <font color=red>Nokia</font> E75 é»è²ææºå¤å£³å
¨å¥ 带æé®åææºå·¥å
·]]></title>638 <total_sold_quantity><![CDATA[0]]></total_sold_quantity>639 <user_nid><![CDATA[350400477]]></user_nid>640 <user_strid><![CDATA[4e1d00e029058aaa1e1d53e9abefcab4]]></user_strid>641 </fields>642 <property>643 </property>644 <sortExprValues>645 0.000210171646 </sortExprValues>647 </hit>648 <hit hash_id="2" docid="9139861">649 <fields>650 <biz30day><![CDATA[2]]></biz30day>651 <cat_id><![CDATA[50012584]]></cat_id>652 <comment0><![CDATA[ä¸å¥½ææè¿å 天æºå¿ 确认æäº]]></comment0>653 <comment1><![CDATA[]]></comment1>654 <comment2><![CDATA[]]></comment2>655 <comment_num><![CDATA[1]]></comment_num>656 <comment_rate0><![CDATA[11]]></comment_rate0>657 <comment_rate1><![CDATA[]]></comment_rate1>658 <comment_rate2><![CDATA[]]></comment_rate2>659 <comment_user0><![CDATA[zgqskzhifubao]]></comment_user0>660 <comment_user1><![CDATA[]]></comment_user1>661 <comment_user2><![CDATA[]]></comment_user2>662 <commercial><![CDATA[0]]></commercial>663 <desp><![CDATA[<font color=red>Nokia</font>线å
E65 E90 E95 N70å
çµå¨ N71 N72...]]></desp>664 <grade_avg><![CDATA[0]]></grade_avg>665 <nick><![CDATA[è·¯è¿æ³å]]></nick>666 <nid><![CDATA[6698634985]]></nid>667 <people_num><![CDATA[0]]></people_num>668 <pict_url><![CDATA[i2/T105xGXlNqXXbUsE6b_095528.jpg]]></pict_url>669 <pid><![CDATA[23615829]]></pid>670 <pidvidt><![CDATA[]]></pidvidt>671 <product_num><![CDATA[6405]]></product_num>672 <ratesum><![CDATA[9]]></ratesum>673 <reserve_price><![CDATA[8]]></reserve_price>674 <seller_goodrate><![CDATA[9587]]></seller_goodrate>675 <title><![CDATA[<font color=red>Nokia</font>线å
E65 E90 E95 N70å
çµå¨ N71 N72线å
N73线å
]]></title>676 <total_sold_quantity><![CDATA[6]]></total_sold_quantity>677 <user_nid><![CDATA[117818253]]></user_nid>678 <user_strid><![CDATA[19d4a11e148c07ee3288ab9d96378482]]></user_strid>679 </fields>680 <property>681 </property>682 <sortExprValues>683 0.000210171684 </sortExprValues>685 </hit>686 <hit hash_id="3" docid="9137643">687 <fields>688 <biz30day><![CDATA[1]]></biz30day>689 <cat_id><![CDATA[50010614]]></cat_id>690 <comment0><![CDATA[]]></comment0>691 <comment1><![CDATA[]]></comment1>692 <comment2><![CDATA[]]></comment2>693 <comment_num><![CDATA[0]]></comment_num>694 <comment_rate0><![CDATA[]]></comment_rate0>695 <comment_rate1><![CDATA[]]></comment_rate1>696 <comment_rate2><![CDATA[]]></comment_rate2>697 <comment_user0><![CDATA[]]></comment_user0>698 <comment_user1><![CDATA[]]></comment_user1>699 <comment_user2><![CDATA[]]></comment_user2>700 <commercial><![CDATA[0]]></commercial>701 <desp><![CDATA[产åæè¿°ï¼èç¹ï¼LT)<font color=red>Nokia</font>/诺åºäº 3610A/...]]></desp>702 <grade_avg><![CDATA[0]]></grade_avg>703 <nick><![CDATA[æ¨æ è¸]]></nick>704 <nid><![CDATA[6817724341]]></nid>705 <people_num><![CDATA[0]]></people_num>706 <pict_url><![CDATA[i3/T16vtHXdhfXXakivg0_035148.jpg]]></pict_url>707 <pid><![CDATA[-6817724341]]></pid>708 <pidvidt><![CDATA[]]></pidvidt>709 <product_num><![CDATA[0]]></product_num>710 <ratesum><![CDATA[3]]></ratesum>711 <reserve_price><![CDATA[20]]></reserve_price>712 <seller_goodrate><![CDATA[9655]]></seller_goodrate>713 <title><![CDATA[èç¹ï¼LT)<font color=red>Nokia</font>/诺åºäº3610A/6555带座æ线]]></title>714 <total_sold_quantity><![CDATA[1]]></total_sold_quantity>715 <user_nid><![CDATA[436855978]]></user_nid>716 <user_strid><![CDATA[4b9ad1c3c7f405847c2a47815ffc08c6]]></user_strid>717 </fields>718 <property>719 </property>720 <sortExprValues>721 0.000210171722 </sortExprValues>723 </hit>724 <hit hash_id="0" docid="9128114">725 <fields>726 <biz30day><![CDATA[1]]></biz30day>727 <cat_id><![CDATA[1512]]></cat_id>728 <comment0><![CDATA[è¿ä¸ªé¢è²é常æ¼äº®ï¼å欢ï¼èæ¿æå¡ä¸éï¼è¿ç»æå®è£
...]]></comment0>729 <comment1><![CDATA[é¢è²å¾å¥½çï¼èæ¿è¿éäºå¥½å¤ç¤¼åï¼è¿å
é®ï¼æ¯æå¨...]]></comment1>730 <comment2><![CDATA[åè´§å¾å¿«ï¼ææºå¾å欢ï¼è¿ä¸ªé¢è²å¾ä¸éï¼èæ¿äººå¾...]]></comment2>731 <comment_num><![CDATA[7]]></comment_num>732 <comment_rate0><![CDATA[4]]></comment_rate0>733 <comment_rate1><![CDATA[4]]></comment_rate1>734 <comment_rate2><![CDATA[4]]></comment_rate2>735 <comment_user0><![CDATA[亲ç±çå¡å¡88]]></comment_user0>736 <comment_user1><![CDATA[æ´å¤©å¦¹å¦¹8]]></comment_user1>737 <comment_user2><![CDATA[çå¿ä»¬ççª]]></comment_user2>738 <commercial><![CDATA[0]]></commercial>739 <desp><![CDATA[----------------------------------------...]]></desp>740 <grade_avg><![CDATA[0]]></grade_avg>741 <nick><![CDATA[èèä¸ç«å¼è´ç©]]></nick>742 <nid><![CDATA[6722451228]]></nid>743 <people_num><![CDATA[0]]></people_num>744 <pict_url><![CDATA[i3/T15rpDXelyXXbTA4gV_020655.jpg]]></pict_url>745 <pid><![CDATA[72468326]]></pid>746 <pidvidt><![CDATA[]]></pidvidt>747 <product_num><![CDATA[7382]]></product_num>748 <ratesum><![CDATA[9]]></ratesum>749 <reserve_price><![CDATA[1280]]></reserve_price>750 <seller_goodrate><![CDATA[9972]]></seller_goodrate>751 <title><![CDATA[ãæ¡åé讯ã<font color=red>Nokia</font>/诺åºäº6700S/Slide æºè½æºæ¸¯è¡ 红èç´«ç²ç»¿é¶]]></title>752 <total_sold_quantity><![CDATA[4]]></total_sold_quantity>753 <user_nid><![CDATA[279716453]]></user_nid>754 <user_strid><![CDATA[95604865bdd3499532e79eec4e399401]]></user_strid>755 </fields>756 <property>757 </property>758 <sortExprValues>759 0.000210171760 </sortExprValues>761 </hit>762 <hit hash_id="1" docid="9124486">763 <fields>764 <biz30day><![CDATA[1]]></biz30day>765 <cat_id><![CDATA[150704]]></cat_id>766 <comment0><![CDATA[åå·¥è¿æãä½æ¯çç¡®å大ä¸å°]]></comment0>767 <comment1><![CDATA[å¾ä¸éçå®è´ å¾æ»¡æ]]></comment1>768 <comment2><![CDATA[èµä¸ä¸ª]]></comment2>769 <comment_num><![CDATA[3]]></comment_num>770 <comment_rate0><![CDATA[501]]></comment_rate0>771 <comment_rate1><![CDATA[4]]></comment_rate1>772 <comment_rate2><![CDATA[91]]></comment_rate2>773 <comment_user0><![CDATA[gegega]]></comment_user0>774 <comment_user1><![CDATA[ççç±åé¥]]></comment_user1>775 <comment_user2><![CDATA[å°æ´1799]]></comment_user2>776 <commercial><![CDATA[0]]></commercial>777 <desp><![CDATA[----------------------------------------...]]></desp>778 <grade_avg><![CDATA[0]]></grade_avg>779 <nick><![CDATA[baiyunæ°ç ]]></nick>780 <nid><![CDATA[6219039792]]></nid>781 <people_num><![CDATA[0]]></people_num>782 <pict_url><![CDATA[i1/T1RfpFXaFjXXbqLRM3_050811.jpg]]></pict_url>783 <pid><![CDATA[73686392]]></pid>784 <pidvidt><![CDATA[]]></pidvidt>785 <product_num><![CDATA[662]]></product_num>786 <ratesum><![CDATA[9]]></ratesum>787 <reserve_price><![CDATA[47]]></reserve_price>788 <seller_goodrate><![CDATA[10000]]></seller_goodrate>789 <title><![CDATA[澳洲PDairç«å½©å¤è² <font color=red>Nokia</font> n97mini ç¡
è¶å¥ åè´¨ä¹é 红è²]]></title>790 <total_sold_quantity><![CDATA[9]]></total_sold_quantity>791 <user_nid><![CDATA[212478869]]></user_nid>792 <user_strid><![CDATA[f3327a1de93bee4398481d69f08b08e3]]></user_strid>793 </fields>794 <property>795 </property>796 <sortExprValues>797 0.000210171798 </sortExprValues>799 </hit>800 <hit hash_id="0" docid="9122611">801 <fields>802 <biz30day><![CDATA[2]]></biz30day>803 <cat_id><![CDATA[50012587]]></cat_id>804 <comment0><![CDATA[èæ¿å¾åé...]]></comment0>805 <comment1><![CDATA[èæ¿ä¾ç¶åéï¼]]></comment1>806 <comment2><![CDATA[]]></comment2>807 <comment_num><![CDATA[2]]></comment_num>808 <comment_rate0><![CDATA[11]]></comment_rate0>809 <comment_rate1><![CDATA[11]]></comment_rate1>810 <comment_rate2><![CDATA[]]></comment_rate2>811 <comment_user0><![CDATA[ç¨yç¡è´°]]></comment_user0>812 <comment_user1><![CDATA[ç¨yç¡è´°]]></comment_user1>813 <comment_user2><![CDATA[]]></comment_user2>814 <commercial><![CDATA[0]]></commercial>815 <desp><![CDATA[使ç¨è¯´æï¼8161ã第ä¸æ¥æ¸
æ´å±å¹ï¼ç¨éèµ ç...]]></desp>817 <grade_avg><![CDATA[0]]></grade_avg>818 <nick><![CDATA[讨åå¹³å®å¤]]></nick>819 <nid><![CDATA[6818006011]]></nid>820 <people_num><![CDATA[0]]></people_num>821 <pict_url><![CDATA[i6/T1tUppXh0aXXbLmTo8_102003.jpg]]></pict_url>822 <pid><![CDATA[80427683]]></pid>823 <pidvidt><![CDATA[]]></pidvidt>824 <product_num><![CDATA[0]]></product_num>825 <ratesum><![CDATA[3]]></ratesum>826 <reserve_price><![CDATA[68]]></reserve_price>827 <seller_goodrate><![CDATA[10000]]></seller_goodrate>828 <title><![CDATA[é¿è¿ªæ®ææºèä¸å®¶-<font color=red>NOKIA</font>诺åºäº 5230 幻彩é»ç³ç³»åå¥è£
]]></title>829 <total_sold_quantity><![CDATA[2]]></total_sold_quantity>830 <user_nid><![CDATA[56983709]]></user_nid>831 <user_strid><![CDATA[71f84a0915e9062e30df53c960641f21]]></user_strid>832 </fields>833 <property>834 </property>835 <sortExprValues>836 0.000210171837 </sortExprValues>838 </hit>839</hits>840<AggregateResults>841</AggregateResults>842<Error>843 <ErrorCode>0</ErrorCode>844 <ErrorDescription></ErrorDescription>845</Error>846</Root>847'''848 if len(sys.argv) < 3:849 print >> sys.stderr, 'Usage: %s <servie_name> <queryfile>'850 sys.exit(1)851 srvn = sys.argv[1]852 qfn = sys.argv[2]853 854 cmper = QueryResComp(srvn)855 f = open(qfn)856 try:857 for qstr in f:858 cmper.fetchResult(qstr)859 # if not cmper.isEqual():860 # print qstr861 break862 finally:863 f.close()...
multiline-comment-style.js
Source:multiline-comment-style.js
1/**2 * @fileoverview enforce a particular style for multiline comments3 * @author Teddy Katz4 */5"use strict";6const astUtils = require("./utils/ast-utils");7//------------------------------------------------------------------------------8// Rule Definition9//------------------------------------------------------------------------------10module.exports = {11 meta: {12 type: "suggestion",13 docs: {14 description: "enforce a particular style for multiline comments",15 category: "Stylistic Issues",16 recommended: false,17 url: "https://eslint.org/docs/rules/multiline-comment-style"18 },19 fixable: "whitespace",20 schema: [{ enum: ["starred-block", "separate-lines", "bare-block"] }],21 messages: {22 expectedBlock: "Expected a block comment instead of consecutive line comments.",23 expectedBareBlock: "Expected a block comment without padding stars.",24 startNewline: "Expected a linebreak after '/*'.",25 endNewline: "Expected a linebreak before '*/'.",26 missingStar: "Expected a '*' at the start of this line.",27 alignment: "Expected this line to be aligned with the start of the comment.",28 expectedLines: "Expected multiple line comments instead of a block comment."29 }30 },31 create(context) {32 const sourceCode = context.getSourceCode();33 const option = context.options[0] || "starred-block";34 //----------------------------------------------------------------------35 // Helpers36 //----------------------------------------------------------------------37 /**38 * Checks if a comment line is starred.39 * @param {string} line A string representing a comment line.40 * @returns {boolean} Whether or not the comment line is starred.41 */42 function isStarredCommentLine(line) {43 return /^\s*\*/u.test(line);44 }45 /**46 * Checks if a comment group is in starred-block form.47 * @param {Token[]} commentGroup A group of comments, containing either multiple line comments or a single block comment.48 * @returns {boolean} Whether or not the comment group is in starred block form.49 */50 function isStarredBlockComment([firstComment]) {51 if (firstComment.type !== "Block") {52 return false;53 }54 const lines = firstComment.value.split(astUtils.LINEBREAK_MATCHER);55 // The first and last lines can only contain whitespace.56 return lines.length > 0 && lines.every((line, i) => (i === 0 || i === lines.length - 1 ? /^\s*$/u : /^\s*\*/u).test(line));57 }58 /**59 * Checks if a comment group is in JSDoc form.60 * @param {Token[]} commentGroup A group of comments, containing either multiple line comments or a single block comment.61 * @returns {boolean} Whether or not the comment group is in JSDoc form.62 */63 function isJSDocComment([firstComment]) {64 if (firstComment.type !== "Block") {65 return false;66 }67 const lines = firstComment.value.split(astUtils.LINEBREAK_MATCHER);68 return /^\*\s*$/u.test(lines[0]) &&69 lines.slice(1, -1).every(line => /^\s* /u.test(line)) &&70 /^\s*$/u.test(lines[lines.length - 1]);71 }72 /**73 * Processes a comment group that is currently in separate-line form, calculating the offset for each line.74 * @param {Token[]} commentGroup A group of comments containing multiple line comments.75 * @returns {string[]} An array of the processed lines.76 */77 function processSeparateLineComments(commentGroup) {78 const allLinesHaveLeadingSpace = commentGroup79 .map(({ value }) => value)80 .filter(line => line.trim().length)81 .every(line => line.startsWith(" "));82 return commentGroup.map(({ value }) => (allLinesHaveLeadingSpace ? value.replace(/^ /u, "") : value));83 }84 /**85 * Processes a comment group that is currently in starred-block form, calculating the offset for each line.86 * @param {Token} comment A single block comment token in starred-block form.87 * @returns {string[]} An array of the processed lines.88 */89 function processStarredBlockComment(comment) {90 const lines = comment.value.split(astUtils.LINEBREAK_MATCHER)91 .filter((line, i, linesArr) => !(i === 0 || i === linesArr.length - 1))92 .map(line => line.replace(/^\s*$/u, ""));93 const allLinesHaveLeadingSpace = lines94 .map(line => line.replace(/\s*\*/u, ""))95 .filter(line => line.trim().length)96 .every(line => line.startsWith(" "));97 return lines.map(line => line.replace(allLinesHaveLeadingSpace ? /\s*\* ?/u : /\s*\*/u, ""));98 }99 /**100 * Processes a comment group that is currently in bare-block form, calculating the offset for each line.101 * @param {Token} comment A single block comment token in bare-block form.102 * @returns {string[]} An array of the processed lines.103 */104 function processBareBlockComment(comment) {105 const lines = comment.value.split(astUtils.LINEBREAK_MATCHER).map(line => line.replace(/^\s*$/u, ""));106 const leadingWhitespace = `${sourceCode.text.slice(comment.range[0] - comment.loc.start.column, comment.range[0])} `;107 let offset = "";108 /*109 * Calculate the offset of the least indented line and use that as the basis for offsetting all the lines.110 * The first line should not be checked because it is inline with the opening block comment delimiter.111 */112 for (const [i, line] of lines.entries()) {113 if (!line.trim().length || i === 0) {114 continue;115 }116 const [, lineOffset] = line.match(/^(\s*\*?\s*)/u);117 if (lineOffset.length < leadingWhitespace.length) {118 const newOffset = leadingWhitespace.slice(lineOffset.length - leadingWhitespace.length);119 if (newOffset.length > offset.length) {120 offset = newOffset;121 }122 }123 }124 return lines.map(line => {125 const match = line.match(/^(\s*\*?\s*)(.*)/u);126 const [, lineOffset, lineContents] = match;127 if (lineOffset.length > leadingWhitespace.length) {128 return `${lineOffset.slice(leadingWhitespace.length - (offset.length + lineOffset.length))}${lineContents}`;129 }130 if (lineOffset.length < leadingWhitespace.length) {131 return `${lineOffset.slice(leadingWhitespace.length)}${lineContents}`;132 }133 return lineContents;134 });135 }136 /**137 * Gets a list of comment lines in a group, formatting leading whitespace as necessary.138 * @param {Token[]} commentGroup A group of comments containing either multiple line comments or a single block comment.139 * @returns {string[]} A list of comment lines.140 */141 function getCommentLines(commentGroup) {142 const [firstComment] = commentGroup;143 if (firstComment.type === "Line") {144 return processSeparateLineComments(commentGroup);145 }146 if (isStarredBlockComment(commentGroup)) {147 return processStarredBlockComment(firstComment);148 }149 return processBareBlockComment(firstComment);150 }151 /**152 * Gets the initial offset (whitespace) from the beginning of a line to a given comment token.153 * @param {Token} comment The token to check.154 * @returns {string} The offset from the beginning of a line to the token.155 */156 function getInitialOffset(comment) {157 return sourceCode.text.slice(comment.range[0] - comment.loc.start.column, comment.range[0]);158 }159 /**160 * Converts a comment into starred-block form161 * @param {Token} firstComment The first comment of the group being converted162 * @param {string[]} commentLinesList A list of lines to appear in the new starred-block comment163 * @returns {string} A representation of the comment value in starred-block form, excluding start and end markers164 */165 function convertToStarredBlock(firstComment, commentLinesList) {166 const initialOffset = getInitialOffset(firstComment);167 return `/*\n${commentLinesList.map(line => `${initialOffset} * ${line}`).join("\n")}\n${initialOffset} */`;168 }169 /**170 * Converts a comment into separate-line form171 * @param {Token} firstComment The first comment of the group being converted172 * @param {string[]} commentLinesList A list of lines to appear in the new starred-block comment173 * @returns {string} A representation of the comment value in separate-line form174 */175 function convertToSeparateLines(firstComment, commentLinesList) {176 return commentLinesList.map(line => `// ${line}`).join(`\n${getInitialOffset(firstComment)}`);177 }178 /**179 * Converts a comment into bare-block form180 * @param {Token} firstComment The first comment of the group being converted181 * @param {string[]} commentLinesList A list of lines to appear in the new starred-block comment182 * @returns {string} A representation of the comment value in bare-block form183 */184 function convertToBlock(firstComment, commentLinesList) {185 return `/* ${commentLinesList.join(`\n${getInitialOffset(firstComment)} `)} */`;186 }187 /**188 * Each method checks a group of comments to see if it's valid according to the given option.189 * @param {Token[]} commentGroup A list of comments that appear together. This will either contain a single190 * block comment or multiple line comments.191 * @returns {void}192 */193 const commentGroupCheckers = {194 "starred-block"(commentGroup) {195 const [firstComment] = commentGroup;196 const commentLines = getCommentLines(commentGroup);197 if (commentLines.some(value => value.includes("*/"))) {198 return;199 }200 if (commentGroup.length > 1) {201 context.report({202 loc: {203 start: firstComment.loc.start,204 end: commentGroup[commentGroup.length - 1].loc.end205 },206 messageId: "expectedBlock",207 fix(fixer) {208 const range = [firstComment.range[0], commentGroup[commentGroup.length - 1].range[1]];209 return commentLines.some(value => value.startsWith("/"))210 ? null211 : fixer.replaceTextRange(range, convertToStarredBlock(firstComment, commentLines));212 }213 });214 } else {215 const lines = firstComment.value.split(astUtils.LINEBREAK_MATCHER);216 const expectedLeadingWhitespace = getInitialOffset(firstComment);217 const expectedLinePrefix = `${expectedLeadingWhitespace} *`;218 if (!/^\*?\s*$/u.test(lines[0])) {219 const start = firstComment.value.startsWith("*") ? firstComment.range[0] + 1 : firstComment.range[0];220 context.report({221 loc: {222 start: firstComment.loc.start,223 end: { line: firstComment.loc.start.line, column: firstComment.loc.start.column + 2 }224 },225 messageId: "startNewline",226 fix: fixer => fixer.insertTextAfterRange([start, start + 2], `\n${expectedLinePrefix}`)227 });228 }229 if (!/^\s*$/u.test(lines[lines.length - 1])) {230 context.report({231 loc: {232 start: { line: firstComment.loc.end.line, column: firstComment.loc.end.column - 2 },233 end: firstComment.loc.end234 },235 messageId: "endNewline",236 fix: fixer => fixer.replaceTextRange([firstComment.range[1] - 2, firstComment.range[1]], `\n${expectedLinePrefix}/`)237 });238 }239 for (let lineNumber = firstComment.loc.start.line + 1; lineNumber <= firstComment.loc.end.line; lineNumber++) {240 const lineText = sourceCode.lines[lineNumber - 1];241 const errorType = isStarredCommentLine(lineText)242 ? "alignment"243 : "missingStar";244 if (!lineText.startsWith(expectedLinePrefix)) {245 context.report({246 loc: {247 start: { line: lineNumber, column: 0 },248 end: { line: lineNumber, column: lineText.length }249 },250 messageId: errorType,251 fix(fixer) {252 const lineStartIndex = sourceCode.getIndexFromLoc({ line: lineNumber, column: 0 });253 if (errorType === "alignment") {254 const [, commentTextPrefix = ""] = lineText.match(/^(\s*\*)/u) || [];255 const commentTextStartIndex = lineStartIndex + commentTextPrefix.length;256 return fixer.replaceTextRange([lineStartIndex, commentTextStartIndex], expectedLinePrefix);257 }258 const [, commentTextPrefix = ""] = lineText.match(/^(\s*)/u) || [];259 const commentTextStartIndex = lineStartIndex + commentTextPrefix.length;260 let offset;261 for (const [idx, line] of lines.entries()) {262 if (!/\S+/u.test(line)) {263 continue;264 }265 const lineTextToAlignWith = sourceCode.lines[firstComment.loc.start.line - 1 + idx];266 const [, prefix = "", initialOffset = ""] = lineTextToAlignWith.match(/^(\s*(?:\/?\*)?(\s*))/u) || [];267 offset = `${commentTextPrefix.slice(prefix.length)}${initialOffset}`;268 if (/^\s*\//u.test(lineText) && offset.length === 0) {269 offset += " ";270 }271 break;272 }273 return fixer.replaceTextRange([lineStartIndex, commentTextStartIndex], `${expectedLinePrefix}${offset}`);274 }275 });276 }277 }278 }279 },280 "separate-lines"(commentGroup) {281 const [firstComment] = commentGroup;282 if (firstComment.type !== "Block" || isJSDocComment(commentGroup)) {283 return;284 }285 const commentLines = getCommentLines(commentGroup);286 const tokenAfter = sourceCode.getTokenAfter(firstComment, { includeComments: true });287 if (tokenAfter && firstComment.loc.end.line === tokenAfter.loc.start.line) {288 return;289 }290 context.report({291 loc: {292 start: firstComment.loc.start,293 end: { line: firstComment.loc.start.line, column: firstComment.loc.start.column + 2 }294 },295 messageId: "expectedLines",296 fix(fixer) {297 return fixer.replaceText(firstComment, convertToSeparateLines(firstComment, commentLines));298 }299 });300 },301 "bare-block"(commentGroup) {302 if (isJSDocComment(commentGroup)) {303 return;304 }305 const [firstComment] = commentGroup;306 const commentLines = getCommentLines(commentGroup);307 // Disallows consecutive line comments in favor of using a block comment.308 if (firstComment.type === "Line" && commentLines.length > 1 &&309 !commentLines.some(value => value.includes("*/"))) {310 context.report({311 loc: {312 start: firstComment.loc.start,313 end: commentGroup[commentGroup.length - 1].loc.end314 },315 messageId: "expectedBlock",316 fix(fixer) {317 return fixer.replaceTextRange(318 [firstComment.range[0], commentGroup[commentGroup.length - 1].range[1]],319 convertToBlock(firstComment, commentLines)320 );321 }322 });323 }324 // Prohibits block comments from having a * at the beginning of each line.325 if (isStarredBlockComment(commentGroup)) {326 context.report({327 loc: {328 start: firstComment.loc.start,329 end: { line: firstComment.loc.start.line, column: firstComment.loc.start.column + 2 }330 },331 messageId: "expectedBareBlock",332 fix(fixer) {333 return fixer.replaceText(firstComment, convertToBlock(firstComment, commentLines));334 }335 });336 }337 }338 };339 //----------------------------------------------------------------------340 // Public341 //----------------------------------------------------------------------342 return {343 Program() {344 return sourceCode.getAllComments()345 .filter(comment => comment.type !== "Shebang")346 .filter(comment => !astUtils.COMMENTS_IGNORE_PATTERN.test(comment.value))347 .filter(comment => {348 const tokenBefore = sourceCode.getTokenBefore(comment, { includeComments: true });349 return !tokenBefore || tokenBefore.loc.end.line < comment.loc.start.line;350 })351 .reduce((commentGroups, comment, index, commentList) => {352 const tokenBefore = sourceCode.getTokenBefore(comment, { includeComments: true });353 if (354 comment.type === "Line" &&355 index && commentList[index - 1].type === "Line" &&356 tokenBefore && tokenBefore.loc.end.line === comment.loc.start.line - 1 &&357 tokenBefore === commentList[index - 1]358 ) {359 commentGroups[commentGroups.length - 1].push(comment);360 } else {361 commentGroups.push([comment]);362 }363 return commentGroups;364 }, [])365 .filter(commentGroup => !(commentGroup.length === 1 && commentGroup[0].loc.start.line === commentGroup[0].loc.end.line))366 .forEach(commentGroupCheckers[option]);367 }368 };369 }...
moderation.py
Source:moderation.py
1from __future__ import absolute_import2from django import template3from django.conf import settings4from django.contrib.auth.decorators import login_required, permission_required5from django.shortcuts import get_object_or_404, render_to_response6from django.views.decorators.csrf import csrf_protect7import annotations8from annotation import signals9from annotation.views.utils import next_redirect, confirmation_view10@csrf_protect11@permission_required("annotations.can_moderate")12def delete(request, comment_id, next=None):13 """14 Deletes a comment. Confirmation on GET, action on POST. Requires the "can15 moderate comments" permission.16 Templates: :template:`comments/delete.html`,17 Context:18 comment19 the flagged `comments.comment` object20 """21 comment = get_object_or_404(annotations.get_model(), pk=comment_id, site__pk=settings.SITE_ID)22 # Delete on POST23 if request.method == 'POST':24 # Flag the comment as deleted instead of actually deleting it.25 perform_delete(request, comment)26 return next_redirect(request, fallback=next or 'annotations-delete-done',27 c=comment.pk)28 # Render a form on GET29 else:30 return render_to_response('annotations/delete.html',31 {'body': comment, "next": next},32 template.RequestContext(request)33 )34@csrf_protect35@permission_required("annotations.can_moderate")36def approve(request, comment_id, next=None):37 """38 Approve a comment (that is, mark it as public and non-removed). Confirmation39 on GET, action on POST. Requires the "can moderate comments" permission.40 Templates: :template:`comments/approve.html`,41 Context:42 body43 the `annotations.annotations` object for approval44 """45 comment = get_object_or_404(annotations.get_model(), pk=comment_id, site__pk=settings.SITE_ID)46 # Delete on POST47 if request.method == 'POST':48 # Flag the comment as approved.49 perform_approve(request, comment)50 return next_redirect(request, fallback=next or 'annotations-approve-done',51 c=comment.pk)52 # Render a form on GET53 else:54 return render_to_response('annotations/approve.html',55 {'body': comment, "next": next},56 template.RequestContext(request)57 )58# The following functions actually perform the various flag/aprove/delete59# actions. They've been broken out into separate functions to that they60# may be called from admin actions.61def perform_flag(request, comment):62 """63 Actually perform the flagging of a comment from a request.64 """65 pass66 '''67 flag, created = django_comments.models.CommentFlag.objects.get_or_create(68 comment = comment,69 user = request.user,70 flag = django_comments.models.CommentFlag.SUGGEST_REMOVAL71 )72 signals.comment_was_flagged.send(73 sender = comment.__class__,74 comment = comment,75 flag = flag,76 created = created,77 request = request,78 )79 '''80#TODO: There will be a central actions table which performs actions, or at least81#records all actions in the framework. The apps may not, internally create such localized 82#tables.83def perform_delete(request, comment):84 '''85 flag, created = annotations.models.CommentFlag.objects.get_or_create(86 comment = comment,87 user = request.user,88 flag = annotations.models.CommentFlag.MODERATOR_DELETION89 )90 '''91 #comment.is_removed = True92 comment.save()93 '''94 signals.comment_was_flagged.send(95 sender = comment.__class__,96 comment = comment,97 flag = flag,98 created = created,99 request = request,100 )101 '''102def perform_approve(request, comment):103 '''104 flag, created = django_comments.models.CommentFlag.objects.get_or_create(105 comment = comment,106 user = request.user,107 flag = django_comments.models.CommentFlag.MODERATOR_APPROVAL,108 )109 '''110 comment.is_removed = False111 comment.is_public = True112 comment.save()113 '''114 signals.comment_was_flagged.send(115 sender = comment.__class__,116 comment = comment,117 flag = flag,118 created = created,119 request = request,120 )121 '''122# Confirmation views.123'''124flag_done = confirmation_view(125 template = "comments/flagged.html",126 doc = 'Displays a "comment was flagged" success page.'127)128'''129delete_done = confirmation_view(130 template = "comments/deleted.html",131 doc = 'Displays a "comment was deleted" success page.'132)133approve_done = confirmation_view(134 template = "comments/approved.html",135 doc = 'Displays a "comment was approved" success page.'...
Comment.jsx
Source:Comment.jsx
1import React from "react";2import CommentForm from "./CommentForm";3import "../../styles/Scars/_Comment.scss";4const Comment = ({5 comment,6 replies,7 setActiveComment,8 activeComment,9 updateComment,10 deleteComment,11 addComment,12 parentId = null,13 currentUserId,14}) => {15 const isEditing =16 activeComment &&17 activeComment.id === comment.id &&18 activeComment.type === "editing";19 const isReplying =20 activeComment &&21 activeComment.id === comment.id &&22 activeComment.type === "replying";23 const fiveMinutes = 300000;24 const timePassed = new Date() - new Date(comment.createdAt) > fiveMinutes;25 const canDelete =26 currentUserId === comment.userId && replies.length === 0 && !timePassed;27 const canReply = Boolean(currentUserId);28 const canEdit = currentUserId === comment.userId && !timePassed;29 const replyId = parentId ? parentId : comment.id;30 const createdAt = new Date(comment.createdAt).toLocaleDateString();31 return (32 <div key={comment.id} className="comment">33 <div className="comment-image-container">34 <img src="https://img1.kienthucvui.vn/uploads/2021/01/09/anh-dai-dien-cho-con-gai-dep-dang-yeu_043116580.jpeg" />35 </div>36 <div className="comment-right-part">37 <div className="comment-content">38 <div className="comment-author">{comment.username}</div>39 <div>{createdAt}</div>40 </div>41 {!isEditing && <div className="comment-text">{comment.body}</div>}42 {isEditing && (43 <CommentForm44 submitLabel="Update"45 hasCancelButton46 initialText={comment.body}47 handleSubmit={(text) => updateComment(text, comment.id)}48 handleCancel={() => {49 setActiveComment(null);50 }}51 />52 )}53 <div className="comment-actions">54 {canReply && (55 <div56 className="comment-action"57 onClick={() =>58 setActiveComment({ id: comment.id, type: "replying" })59 }60 >61 trả lá»i62 </div>63 )}64 {canEdit && (65 <div66 className="comment-action"67 onClick={() =>68 setActiveComment({ id: comment.id, type: "editing" })69 }70 >71 sá»a72 </div>73 )}74 {canDelete && (75 <div76 className="comment-action"77 onClick={() => deleteComment(comment.id)}78 >79 xóa80 </div>81 )}82 </div>83 {isReplying && (84 <CommentForm85 submitLabel="Reply"86 handleSubmit={(text) => addComment(text, replyId)}87 />88 )}89 {replies.length > 0 && (90 <div className="replies">91 {replies.map((reply) => (92 <Comment93 comment={reply}94 key={reply.id}95 setActiveComment={setActiveComment}96 activeComment={activeComment}97 updateComment={updateComment}98 deleteComment={deleteComment}99 addComment={addComment}100 parentId={comment.id}101 replies={[]}102 currentUserId={currentUserId}103 />104 ))}105 </div>106 )}107 </div>108 </div>109 );110};...
Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!