User:Ikip/script


 * Download autohotkey.
 * Download the COM file: http://www.autohotkey.com/forum/viewtopic.php?t=22923 which should be dragged and dropped into:
 * My Documents\autohotkey\lib (create both folders first)

Both files we have created are confusingly the same file name.

rum.ahk: place in My documents

 * 1) NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases.
 * 2) SingleInstance Force	; prevents dialogue with forceful restart

OnMessage(0x44, "WM_COMMNOTIFY")	; provides for a graceful reload when app exit subs take some time before closing the app

AutoTrim on SendMode Input ; Recommended for new scripts due to its superior speed and reliability. SetFormat, Integer, d DetectHiddenText, off DetectHiddenWindows, off SetKeyDelay, 0, 0		; set delay for virtual keystrokes SetControlDelay, 0 SetTitleMatchMode, 2	; match beginning mode OnExit, rum_Exit_app

Rum_Start_app	; init code and what not

wiki_del_repo_url := "http://en.wikipedia.org/wiki/User:Ikip/77" ; hard coded for the time being
 * wiki_del_repo_url := rum_query_user_for_article_repo	;returns the repo url entered by the user

wiki_article_del_cnt := rum_article_get_del_cnt(wiki_del_repo_url)	; returns article count - also builds an array of article titles > wiki_article%element% where element 0 = total article count

final_results := "Total number of articles up for deletion review: ". wiki_article_del_cnt . "`n`n"

loop, %wiki_article_del_cnt% {	wiki_article_num := a_index wiki_article_GNEWS_hits%a_index% := rum_article_get_GNEWS_hits(wiki_article%a_index%, a_index)	; returns the gnews hit counts on the article - passing indes for file naming purposes wiki_article_GBOOK_hits%a_index% := rum_article_get_GBOOK_hits(wiki_article%a_index%, a_index)	; returns the gbook hit counts on the article - passing indes for file naming purposes wiki_article_GSCHOLAR_hits%a_index% := rum_article_get_GSCHOLAR_hits(wiki_article%a_index%, a_index)	; my try wiki_article_edit_count%a_index% := rum_article_get_editor_cnt(wiki_article%a_index%, a_index)	; returns the editor count on the article - passing indes for file naming purposes

wiki_article_CREATOR%a_index% := rum_article_get_CREATOR(wiki_article%a_index%, a_index)	; returns the article's creator wiki_article_NOMINATOR%a_index% := rum_article_get_NOMINATOR(wiki_article%a_index%, a_index)	; returns article's deletion nominator

editor_vitals := loop, % wiki_article_edit_count%wiki_article_num% 	;% {		editor_vitals .= "[http://en.wikipedia.org/w/index.php?title=User_talk:&action=edit&section=new&preloadtitle=&preload=User:ikip/7 ". Wiki_Art_%wiki_article_num%_Editor_%a_index%_Name. "] "		editor_vitals .= Wiki_Art_%wiki_article_num%_Editor_%a_index%_EditCounts. " "		editor_vitals .= Wiki_Art_%wiki_article_num%_Editor_%a_index%_LastEditDate. " " }

final_results .= "`n{|style=""border: solid 2px #D72323; padding: 8px;""`n|valign=top align=center style=""background-color:#F3F2F2""|" . wiki_article%a_index% . "`n". a_index. " of ". wiki_article_del_cnt . "`n|valign=top align=center|Google`n{|`n|`n|valign=top align=center|News`n [http://news.google.com/archivesearch?q= ". wiki_article_GNEWS_hits%a_index% 	. "]`n|valign=top align=center|Books`n [http://books.google.com/books?q=%2B ". wiki_article_GBOOK_hits%a_index%. "]`n|valign=top align=center|Scholar`n [http://scholar.google.com/scholar?&q= ". wiki_article_Gscholar_hits%a_index%. "]`n|}`n{| class=""navbox collapsible "" style=""text-align: left; border: 1px solid silver; margin-top: 0.2em;""`n|-`n! style=""background-color: #F3F2F2;"" | cut and paste    `n|-`n| style=""border: solid 1px silver; padding: 8px; background-color: white; "" |`n Google news: [http://news.google.com/archivesearch?q= ". wiki_article_GNEWS_hits%a_index%. "],  Google books: [http://books.google.com/books?q=%2B ". wiki_article_GBOOK_hits%a_index%. "], Google scholar: [http://scholar.google.com/scholar?&q= ". wiki_article_Gscholar_hits%a_index%. "] `n`n|valign=top|Editor Count: ". wiki_article_edit_count%a_index%. " Creator: ". wiki_article_CREATOR%a_index%. " Nominator: ". wiki_article_NOMINATOR%a_index%. "`n " . editor_vitals ; all editor statistics . " `n Brought to you by the Article Rescue Squadron `n|}`n`n "

}


 * rum_display_results

filedelete, resources\final_results.txt fileappend, %final_results%, resources\final_results.txt
 * msgbox %errorlevel%

Run, notepad.exe "%A_WorkingDir%\resources\final_results.txt" goto Rum_Exit_app
 * Run, resources\final_results.txt

Return

rum.ahk in My Documents\autohotkey\lib
WM_COMMNOTIFY(wParam) { global If (wParam = 1031) ; AHK_Exit_BY_SingleINSTANCE MsgBox, 0,, Exiting to make way for another instance!, 1 } Rum_Start_app { global If !FileExist(A_ScriptDir . "\resources") FileCreateDir, % A_ScriptDir. "\resources"		;% else FileRecycle, resources\*.* COM_Init Return } Rum_Exit_app: ;** Sleep 1000 COM_Term ExitApp ; The only way for an OnExit script to terminate itself is to use ExitApp in the OnExit subroutine Return ;* Rum_Reload_app { global Reload Return } rum_article_get_del_cnt(wiki_del_repo)	{ ; ROLLED OVER TO COM returns article count - also builds an array of article titles > wiki_article%element% where element 0 = total count global URLDownloadToFile, %wiki_del_repo%, resources\wiki.htm FileRead, WIKIPEDIAsource, resources\wiki.htm

wiki_article0 := 0 doc := COM_CreateObject("{25336920-03F9-11CF-8FD0-00AA00686F13}") COM_Invoke(doc, "write", WIKIPEDIAsource) COM_Invoke(doc, "Close") spans := COM_Invoke(doc, "getElementsByTagName", "span")

span_cnt := COM_Invoke(spans, "length")	;%

; msgbox, # spans: %span_cnt%

index_pointer := 0

Loop, %span_cnt% {		span := COM_Invoke(spans, "item", A_Index-1)

If COM_Invoke(span, "className")="toctext" {			index_pointer++ content_span_index%index_pointer% := a_index }		COM_Release(span) }	content_span_cnt := index_pointer

index_pointer := 1	; the autogenerated arrays are 1 based, not 0 based - see bottom of loop Loop, %span_cnt% {		span := COM_Invoke(spans, "item", A_Index-1)

If (content_span_index%index_pointer% = a_index)	; <-- this is why i am indexing at 1 vs 0 {			If COM_Invoke(span, "className")="toctext" {					temp := COM_Invoke(span, "innerText") wiki_article%index_pointer% = %temp%	;stripping off leading and trailing spaces - autotrim is on				} index_pointer++ }		COM_Release(span) }	index_pointer--		; get it back in sync COM_Release(spans) COM_Release(doc) return, (wiki_article0 := index_pointer) } rum_article_get_gnews_hits(wiki_article, index="")	{	; THIS WAS NOT ROLLED OVER TO COM - ONLY ADAPTED returns the gnews hit counts on the article global URLDownloadToFile, % "http://news.google.com/archivesearch?q=". chr(34). wiki_article. chr(34). "+&btnG=Search+Archives", resources\GNews%index%.htm	;% FileRead, GNEWSsource, resources\GNews%index%.htm RegExMatch(GNEWSsource, "of (?:about )?(\S+)", Subl) RetVal:= RegExReplace(Subl1, "[^\d]") if (RetVal = "") RetVal := 0

return, RetVal } rum_article_get_gbook_hits(wiki_article, index="")	{	; THIS WAS NOT ROLLED OVER TO COM - ONLY ADAPTED returns the gbook hit counts on the article global URLDownloadToFile, % "http://books.google.com/books?q=%2B". chr(34). wiki_article. chr(34). "+&btnG=Search+Books", resources\GBooks%index%.htm	;% FileRead, GBOOKsource, resources\GBooks%index%.htm RegExMatch(GBOOKsource, "of (?:about )?(\S+)", Subn) RetVal := RegExReplace(Subn1, "[^\d]") if (RetVal = "") RetVal := 0

return, RetVal } rum_article_get_CREATOR(wiki_article, index="")	{	; ; THIS IS A COM implementation global ; http://en.wikipedia.org/w/index.php?title=BLAHBLAHBLAH&dir=prev&action=history&limit=1 URLDownloadToFile, % "http://en.wikipedia.org/w/index.php?title=" wiki_article. "&dir=prev&action=history&limit=1", resources\CREATOR%index%.htm	;% FileRead, CREATORsource, resources\CREATOR%index%.htm

wiki_CREATOR_0 := 0 doc := COM_CreateObject("{25336920-03F9-11CF-8FD0-00AA00686F13}") COM_Invoke(doc, "write", CREATORsource) COM_Invoke(doc, "Close") spans := COM_Invoke(doc, "getElementsByTagName", "span")

span_cnt := COM_Invoke(spans, "length")

; msgbox, # spans: %span_cnt%

index_pointer := 0

Loop, %span_cnt% {		span := COM_Invoke(spans, "item", A_Index-1)

If COM_Invoke(span, "className")="history-user" {			index_pointer++ content_span_index%index_pointer% := a_index }		COM_Release(span) }	content_span_cnt := index_pointer

; msgbox, # of spans with className=history-user: %index_pointer% index_pointer := 1	; the autogenerated arrays are 1 based, not 0 based - see bottom of loop Loop, %span_cnt% {		span := COM_Invoke(spans, "item", A_Index-1)

If (content_span_index%index_pointer% = a_index)	; <-- this is why i am indexing at 1 vs 0 {			If COM_Invoke(span, "className")="history-user" {					a:=COM_Invoke(span, "firstChild") temp := COM_Invoke(a, "innerText") COM_Release(a) wiki_CREATOR_%index_pointer% = %temp%	;stripping off leading and trailing spaces - autotrim is on				} index_pointer++ }		COM_Release(span) }	index_pointer--		; get it back in sync COM_Release(spans) COM_Release(doc) wiki_CREATOR_0 := index_pointer return, wiki_CREATOR_1 } rum_article_get_NOMINATOR(wiki_article, index="")	{	; ; THIS IS A COM implementation global ; http://en.wikipedia.org/w/index.php?title=Wikipedia:Articles%20for%20deletion/BLAHBLAHBLAH&dir=prev&action=history&limit=1 URLDownloadToFile, % "http://en.wikipedia.org/w/index.php?title=Wikipedia:Articles%20for%20deletion/". wiki_article. "&dir=prev&action=history&limit=1", resources\NOMINATOR%index%.htm	;% FileRead, NOMINATORsource, resources\NOMINATOR%index%.htm

wiki_NOMINATOR_0 := 0 doc := COM_CreateObject("{25336920-03F9-11CF-8FD0-00AA00686F13}") COM_Invoke(doc, "write", NOMINATORsource) COM_Invoke(doc, "Close") spans := COM_Invoke(doc, "getElementsByTagName", "span")

span_cnt := COM_Invoke(spans, "length")

; msgbox, # spans: %span_cnt%

index_pointer := 0

Loop, %span_cnt% {		span := COM_Invoke(spans, "item", A_Index-1)

If COM_Invoke(span, "className")="history-user" {			index_pointer++ content_span_index%index_pointer% := a_index }		COM_Release(span) }	content_span_cnt := index_pointer

; msgbox, # of spans with className=history-user: %index_pointer% index_pointer := 1	; the autogenerated arrays are 1 based, not 0 based - see bottom of loop Loop, %span_cnt% {		span := COM_Invoke(spans, "item", A_Index-1)

If (content_span_index%index_pointer% = a_index)	; <-- this is why i am indexing at 1 vs 0 {			If COM_Invoke(span, "className")="history-user" {					a:=COM_Invoke(span, "firstChild") temp := COM_Invoke(a, "innerText") COM_Release(a) wiki_NOMINATOR_%index_pointer% = %temp%	;stripping off leading and trailing spaces - autotrim is on				} index_pointer++ }		COM_Release(span) }	index_pointer--		; get it back in sync COM_Release(spans) COM_Release(doc) wiki_NOMINATOR_0 := index_pointer return, wiki_NOMINATOR_1 } rum_article_get_gscholar_hits(wiki_article, index="")	{	; THIS WAS NOT ROLLED OVER TO COM - ONLY ADAPTED my try GScholar global URLDownloadToFile, % "http://scholar.google.com/scholar?q=". chr(34). wiki_article. chr(34). "&hl=en&btnG=Search", resources\GScholar%index%.htm	;% FileRead, GSCHOLARsource, resources\GSCHOLAR%index%.htm RegExMatch(GSCHOLARsource, "of (?:about )?(\S+)", Subq) RetVal := RegExReplace(Subq1, "[^\d]") if (RetVal = "") RetVal := 0

return, RetVal } rum_article_get_editor_cnt(wiki_article, index="")	{	; ROLLED OVER TO COM returns the editor count on the article and builds the editor arrays global												; Wiki_Art_%#%_editor_%element%, where Wiki_Art_%#%_editor_0 = total editor count for article %#%

URLDownloadToFile, % "http://toolserver.org/~daniel/WikiSense/Contributors.php?wikilang=en&wikifam=.wikipedia.org&grouped=on&page=". wiki_article. "", resources\WikiEditors%index%.htm	;% FileRead, WikiEditorSource, resources\WikiEditors%index%.htm

Wiki_Editor_Cnt0 := 0 doc := COM_CreateObject("{25336920-03F9-11CF-8FD0-00AA00686F13}") COM_Invoke(doc, "write", WikiEditorSource) COM_Invoke(doc, "Close") tables := COM_Invoke(doc, "getElementsByTagName", "table") table_cnt := COM_Invoke(tables, "length")	;% Loop, %table_cnt%  ; TO GRAB ALL tables, but should only be ONE {		t := COM_Invoke(tables, "item", A_Index-1) WikiEditorTable%a_index% := COM_Invoke(t, "innerText") COM_Release(t) }

COM_Release(tables) COM_Release(doc) ; all editor vitas should now be in WikiEditorTableX now need to build individual arrays Loop, %table_cnt%	; TO GRAB ALL tables, but should only be ONE {		filedelete, resources\Editor_Vitals_%index%_%a_index%.txt fileappendstring := WikiEditorTable%a_index% fileappend, %fileappendstring%, resources\Editor_Vitals_%index%_%a_index%.txt

loop, read, resources\Editor_Vitals_%index%_%a_index%.txt {			editor_index := a_index - 1 if (a_index = 1) continue		; first line has column headers from table test := InStr(A_LoopReadLine, ")")	; Returns the position of the first occurrence 			name_len := strlen(A_LoopReadLine) - test - 32			StringRight, EditDates, A_LoopReadLine, 32	; 2007-11-28 20:482007-11-28 20:51			StringRight, lastEditDatetime, EditDates, 16	; 2007-11-28 20:51			Stringleft, Wiki_Art_%index%_Editor_%editor_index%_LastEditDate, lastEditDatetime, 10	; 2007-11-28			stringleft, Wiki_Art_%index%_Editor_%editor_index%_EditCounts, A_LoopReadLine, test

Wiki_Art_%index%_Editor_%editor_index%_Name := substr(A_LoopReadLine, (test +1), name_len) }		}	return, (Wiki_Editor_Cnt0 := editor_index) } rum_display_results	{ global return }

Create a resources folder in my documents
Create a resources folder in my documents.