用戶:Antigng-bot/interwikilinkfix
![]() | 本用戶頁正在大幅修改,持續時間「48h」,請勿在此期間編輯。 當重大編輯結束或暫時停止編輯時,請移除本模板。您可於編輯歷史中查看添加本模板的編者。 本模板是為了避免編輯衝突,請於本次重大編輯結束後立即移除本模板,讓其他編者能繼續編輯本用戶頁。 致其他編者:當本用戶頁最後編輯時間(3169日11時20分3秒前,重新整理)距今超逾「48h」,請直接移除本模板即可。 |
struct problemlist
{
char title[100];
struct problemlist *next;
};
struct problemlist *query()
{
FILE *f,*g;
char line[1000]={0},title[100]={0};
const char *match="ns=\"0\" title=\"";
const int length=strlen(match);
register int i,j,k;
struct problemlist *pre,*temp,*head=0;
get("https://zh.wikipedia.org/w/api.php?action=query&list=search&srnamespace=0&format=xml&srlimit=500&srsearch=insource%3A%2F%5C%5B%5C%5B%5C%3A%5Cen%5C%3A%2F","a.txt",1);
f=fopen("a.txt","r+");
g=fopen("b.txt","w+");
do
{
fgets(line,1000,f);
}while(line[0]!='<'&&!feof(f));
while(!feof(f))
{
i=0;
while(line[i])
{
for(j=0;j<length;j++)
{
if(line[i+j]!=match[j]) break;
}
if(j==length)
{
for(k=0;line[i+j+k]!='\"'&&line[i+j+k]!=0;k++)
{
title[k]=line[i+j+k];
}
title[k]=0;
// printf("%s\n",title);
if(line[i+j+k]=='\"')
{
if(!head)
{
pre=temp=(struct problemlist *)malloc(sizeof(struct problemlist));
head=temp;
}
else
{
pre=temp;
temp=(struct problemlist *)malloc(sizeof(struct problemlist));
pre->next=temp;
}
strcpy(temp->title,title);
temp->next=0;
fprintf(g,"%s\n",title);
}
}
i++;
}
fgets(line,1000,f);
}
fclose(f);
fclose(g);
return head;
}
int proceed(struct problemlist* p,struct problemlist **new,int depth)
{
struct problemlist *head;
FILE *f,*debug;
register int count=0,i=0,error=0,j,k,l,cl,flag,status=0,todo=0;
char c[1000],line[1000],tt[200],*newtext,temp[20],ch,chinese[500]={0},foreign[500]={0},link_en[1000]={0};
char *match="[[:en:";
int length=strlen(match);
if(!p) return -1;
newtext=(char *)malloc(1024*1024);
head=p;
for(count=0;count<depth&&head;count++,head=head->next)
{
strcpy(c,"https://zh.wikipedia.org/w/index.php?action=raw&title=");
URLEncode(head->title,strlen(head->title),tt,200);
strcat(c,tt);
get(c,"text.txt",0);
//printf("mark 1:\n");
f=fopen("text.txt","r+");
flag=0;
while(!feof(f))
{
ch=fgetc(f);
if(ch=='\r')
{
if(flag==0) flag=1;
else if(flag==2) flag=3;
}
if(ch=='\n')
{
if(flag==1) flag=2;
else if(flag==3)
{
flag=4;
break;
}
}
if(ch!='\n'&&ch!='\r') flag=0;
}
if(flag!=4) continue;
status=0;todo=0;error=0;cl=0;
// printf("mark 2:\n");
while(!feof(f))
{
fgets(line,1000,f);
// printf("%s\n",line);
i=0;
while(line[i])
{
switch(line[i])
{
case '{':status++;break;
case '}': status--;break;
}
if(line[i]==match[0]&&status<2)
{
// printf("preok\n");
for(j=0;j<length;j++)
{
if(line[i+j]!=match[j]) break;
}
if(j==length)
{
// printf("ok\n");
i=i+j;
foreign[0]=0;chinese[0]=0;
k=0;l=0;
while(line[i]&&line[i]!='|'&&line[i]!=']')
{
foreign[k]=line[i];
i++;k++;
foreign[k]=0;
}
switch(line[i])
{
case 0:error=1;break;
case ']':if(line[i+1]!=']')
{
error=1;
break;
}
else
{
i+=2;
break;
}
case '|': i++;
while(line[i]&&line[i]!=']')
{
chinese[l]=line[i];
i++;l++;
chinese[l]=0;
}
switch(line[i])
{
case 0:error=1;break;
case ']':if(line[i+1]!=']')
{
error=1;
break;
}
else
{
i+=2;
}
}
}
if(error) break;
if(!foreign[0])
{
error=1;
break;
}
if(!chinese[0])
{
strcpy(chinese,foreign);
}
if(!todo) todo=1;
sprintf(link_en,"{{link-en|%s|%s}}",chinese,foreign);
strcat(newtext,link_en);
cl+=strlen(link_en);
continue;
}
}
newtext[cl]=line[i];
i++;
cl++;newtext[cl]=0;
}
}
newtext[cl]=0;
if(error) continue;
if(todo) edit(head->title,newtext);
}
free(newtext);
fclose(f);
return 0;
}