Page 2 of 2

Posted: Fri Feb 01, 2008 10:27 am
by Conor
I would use the string methods. The NSPredicate is powerful, but since you want to do a replace. I would go straight for the replaceOccurrencesOfString: method.

Code: Select all

[cleanString replaceOccurrencesOfString:@"\t" withString:@""  options:NSLiteralSearch range:NSMakeRange(0, [cleanString length])];
Stack as many of those in a row, there is no point in using the rangeOfString: to then determine if you are going to remove the same section. It's quite likely that internally replaceOccurrencesOfString: uses rangeOfString: method.

Code: Select all

[cleanString replaceOccurrencesOfString:@"\n\n" withString:@"\n"  options:NSLiteralSearch range:NSMakeRange(0, [cleanString length])];
Bug if you really want to be specific and find the range of a string, the location value of the range will let you know if the string was found:

Code: Select all

NSRange range = [results rangeOfString:@"\t"];
if (range.location != NSNotFound) {
    //match
}
There no need to escape the back slash as "\t" is equal to tab.

Posted: Fri Feb 01, 2008 10:40 am
by Rigido
That's why you wrote *pedias and I just wrote small VisualBasic routine! :(
I was going for the while loop in order to remove ALL of the occurrences of a given string and probably I didn't find this method because i was looking on the NSString class (hope I'm using right terms).
What do you think on substituting double spaces with single one (so, in case of an even number of spaces we will remain with just one)?

Posted: Fri Feb 01, 2008 4:46 pm
by Conor
Your going to need the "while" loop to run the replace a number of times until there are no double spaces. The replaceOccurrencesOfString: returns the number of replacements that took place, so adding it to a while loop is enough.

Code: Select all

while ([cleanString replaceOccurrencesOfString:@"\n\n" withString:@"\n"  options:NSLiteralSearch range:NSMakeRange(0, [cleanString length])] != 0);
The "!= 0" is not needed and can be implicit, but I put it in to make clear what is happening.

Your doing really well for recently diving into Cocoa and objective-C. It's a documentation heavy language as there is so much to it. Inheritance is one of the tricky parts to remember. That an object might respond to more messages than are in NSString, that it might be a subset or that it has parents that have more methods. Speaking of NSMutableString, make sure to turn the string you pass into the method into a NSMutableString if necessary, just like the other clean method.

Posted: Mon Feb 04, 2008 6:51 pm
by Rigido
Here I am...again! :)
First I would like to ask what do you think about assumptions (hope the online dictionary works well). I mean that I put on the plugin some code to convert video format to uppercase (so we will always have PAL and NTSC) and even to convert to uppercase media type if string length <= 3 (DVD, HD or BD but not blu-ray).
Secondly I have a little problem with actors code

Code: Select all

	//Cast
	NSString *castSection = [results stringBetween:@">Cast:" and:@"ShowCast"];
	NSArray *credits = [castSection stringsBetween:@"sottolinguette href='/tvweb/appli" and:@"</"]; //notice plural of 'strings' returns a list of strings
	NSMutableArray *creditsArray = [NSMutableArray array]; //To hold our credit information
	NSEnumerator *creditsEnum = [credits objectEnumerator];
	NSString *nextPerson;
	while (nextPerson = [creditsEnum nextObject]) {
		   nextPerson = [nextPerson stringBetween:@">" and:@"</a"]; //remove URL part
		   NSMutableDictionary *oneCredit = [NSMutableDictionary dictionary];
		   [oneCredit setValue:nextPerson forKey:@"name"];
//		   [oneCredit setValue:nextRole forKey:@"role"]; //if there was a role it would be added here to the dictionary
		   [creditsArray addObject:oneCredit];
	}
	if ([creditsArray count])
		   [returnData setValue:creditsArray forKey:@"creditsSet"];
It looks good on the console

Code: Select all

05/02/08 00:38:16 DVDpedia[1047] Details: {
    creditsSet =     (
                {
            name = "Alan Rickman";
        },
                {
            name = "Brendan Gleeson";
        },
                {
            name = "Daniel Radcliffe";
        },
                {
            name = "Emma Watson";
        },
                {
            name = "Fiona Shaw";
        }
    );
But nothing appears on DVDpedia Input window, any hint?

Posted: Tue Feb 05, 2008 4:12 am
by Conor
I have to update the constant.h but the real key for credits is just "credits" without the "Set", sorry about that old information. It should be:

Code: Select all

[returnData setValue:creditsArray forKey:@"credits"];

Posted: Tue Feb 05, 2008 5:50 am
by Rigido
Conor wrote:I have to update the constant.h but the real key for credits is just "credits" without the "Set", sorry about that old information. It should be:

Code: Select all

[returnData setValue:creditsArray forKey:@"credits"];
Do I have to change the constant.h on my project too?

Posted: Tue Feb 05, 2008 6:32 am
by Conor
Not in this case, as you are using the string directly @"credits" and not the constant MKKeyDVDCredits.

Posted: Tue Feb 05, 2008 7:37 pm
by Rigido
Ciao Conor...you've got mail... ;)

Posted: Wed Feb 20, 2008 8:06 pm
by James23
The file constant.h will give a list of all the keys you can use to pass data in, but they are mostly what you would expect.

Posted: Thu Feb 21, 2008 4:05 am
by Rigido
James23 wrote:The file constant.h will give a list of all the keys you can use to pass data in, but they are mostly what you would expect.
That's almost true...
Conor sent me a plug-in skeleton and I just had to write code to extract data but the constants.h file was not updated (that's why I asked about creditsSet, the constat in the header file...).

Re: Writing a plug-in

Posted: Sun Apr 13, 2008 4:57 pm
by lenbanks
I too would like a new sight added to search, but even after reading the instructions you offer to do this, it is just not in my skill set. Anyone open to doing this and making it available? The sight I want to add for searches is DVDEmpire.com. Before I started using DVDpedia, I was using another program that had them in the search options. Certainly Amazon and imdb are the best, but there just are those times when DVDEmpire had a better cover or summary.

Thanks in advance!!!